Scala練習-排序算法總結

之前用Scala實現了9個排序算法,後續有時間湊個10大。

源碼已經全部上傳到github

  • 冒泡:外層控制遍歷輪次i,內層負責交換數據,使最大的上浮到size-1-i的位置
  • 快排:以第一個數爲標準,小於等於到放在左邊數組,大於的放到右邊數組,遞歸歸類左右兩邊數組,直至數組中的個數爲1,收網
  • 歸併:先寫出合併2個有序數組的方法,然後採用2分法,切分數組成2個新數組,迭代分支各個子數組,直到子數組個數1,可認爲是有序的。排序好子數組後,再合併,收網。

  • 思想很新穎,排序也很快,但是你想打印輸出出來的話,也很費勁啊。該排序適合知道數據範圍的,因爲他需要指定大小的桶來存放數據,數據值就是表示桶中索引,存在一個,該處的索引對應的值加1。
  • 基數:基於10字桶排序,需要用到二維數組。但是不是以值作爲索引,而是以值的各個位上的值作爲索引,所以數組中最大值有幾位,就要進行幾次劃分。代碼量比較大,後期需要優化下。
  • 插入:把數組分爲2個子數組A和B,A含有數組第一個元素,B含有除第一個元素外的所有元素,遍歷第二個數組中元素,依次插入到第一個數組中,插入的時候要根據大小找到插入的位置,適當的調整A數組中其他元素的位置(後移)。直到B中的所有元素都插入到A
  • 選擇:依次選擇數組中最小(或最大)的元素,於第一個位置的元素交換。然後再把剩下的元素當成一個子數組,繼續第一次的操作。直到子數組的元素爲1結束。
  • 希爾:利用插入排序的一種算法,用步長切分數組爲一個一個小數組,小數組採用插入排序獲得有序。步長step的設定一般是以數組長度/2,後續依次用step/2,直到step=0,結束輪循。
  • :利用最大堆/最小堆的特性,來選擇第一個索引的數,然後將剩下的元素,再變成符合最大堆/最小堆的結果,再獲取第一個索引的數。重點要理解堆結構,需要寫出把普通數組轉換爲符合堆結構的方法,生下來的就是不斷取第一個數輸出,剩下來的數組成子數組,再變成對結構。直到剩下來數組長度爲1結束。

其時間複雜度對比如下圖(盜圖)

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章