一遍記住Java常用的八種排序算法與代碼實現

1.直接插入排序

經常碰到這樣一類排序問題:把新的數據插入到已經排好的數據列中。

  1. 將第一個數和第二個數排序,然後構成一個有序序列

  2. 將第三個數插入進去,構成一個新的有序序列。

  3. 對第四個數、第五個數……直到最後一個數,重複第二步。

一遍記住Java常用的八種排序算法與代碼實現

如何寫成代碼:

  1. 首先設定插入次數,即循環次數,for(int i=1;i

  2. 設定插入數和得到已經排好序列的最後一個數的位數。insertNum和j=i-1。

  3. 從最後一個數開始向前循環,如果插入數小於當前數,就將當前數向後移動一位。

  4. 將當前數放置到空著的位置,即j+1。

代碼實現如下:

一遍記住Java常用的八種排序算法與代碼實現

2.希爾排序

對於直接插入排序問題,數據量巨大時。

  1. 將數的個數設為n,取奇數k=n/2,將下標差值為k的書分為一組,構成有序序列。

  2. 再取k=k/2 ,將下標差值為k的書分為一組,構成有序序列。

  3. 重複第二步,直到k=1執行簡單插入排序。

一遍記住Java常用的八種排序算法與代碼實現

如何寫成代碼:

  1. 首先確定分的組數。

  2. 然後對組中元素進行插入排序。

  3. 然後將length/2,重複1,2步,直到length=0為止。

代碼實現如下:

一遍記住Java常用的八種排序算法與代碼實現

3.簡單選擇排序

常用於取序列中最大最小的幾個數時。

(如果每次比較都交換,那麼就是交換排序;如果每次比較完一個循環再交換,就是簡單選擇排序。)

  1. 遍歷整個序列,將最小的數放在最前面。

  2. 遍歷剩下的序列,將最小的數放在最前面。

  3. 重複第二步,直到只剩下一個數。

一遍記住Java常用的八種排序算法與代碼實現

如何寫成代碼:

  1. 首先確定循環次數,並且記住當前數字和當前位置。

  2. 將當前位置後面所有的數與當前數字進行對比,小數賦值給key,並記住小數的位置。

  3. 比對完成後,將最小的值與第一個數的值交換。

  4. 重複2、3步。

代碼實現如下:

一遍記住Java常用的八種排序算法與代碼實現

4.堆排序

對簡單選擇排序的優化。

  1. 將序列構建成大頂堆。

  2. 將根節點與最後一個節點交換,然後斷開最後一個節點。

  3. 重複第一、二步,直到所有節點斷開。

一遍記住Java常用的八種排序算法與代碼實現

代碼實現如下:

一遍記住Java常用的八種排序算法與代碼實現

5.冒泡排序

一般不用。

  1. 將序列中所有元素兩兩比較,將最大的放在最後面。

  2. 將剩餘序列中所有元素兩兩比較,將最大的放在最後面。

  3. 重複第二步,直到只剩下一個數。

一遍記住Java常用的八種排序算法與代碼實現

如何寫成代碼:

  1. 設置循環次數。

  2. 設置開始比較的位數,和結束的位數。

  3. 兩兩比較,將最小的放到前面去。

  4. 重複2、3步,直到循環次數完畢。

代碼實現如下:

一遍記住Java常用的八種排序算法與代碼實現

6.快速排序

要求時間最快時。

  1. 選擇第一個數為p,小於p的數放在左邊,大於p的數放在右邊。

  2. 遞歸的將p左邊和右邊的數都按照第一步進行,直到不能遞歸。

一遍記住Java常用的八種排序算法與代碼實現

代碼實現如下:

一遍記住Java常用的八種排序算法與代碼實現

7.歸併排序

速度僅次於快排,內存少的時候使用,可以進行並行計算的時候使用。

  1. 選擇相鄰兩個數組成一個有序序列。

  2. 選擇相鄰的兩個有序序列組成一個有序序列。

  3. 重複第二步,直到全部組成一個有序序列。

一遍記住Java常用的八種排序算法與代碼實現

代碼實現如下:

一遍記住Java常用的八種排序算法與代碼實現

8.基數排序

用於大量數,很長的數進行排序時。

  1. 將所有的數的個位數取出,按照個位數進行排序,構成一個序列。

  2. 將新構成的所有的數的十位數取出,按照十位數進行排序,構成一個序列。

一遍記住Java常用的八種排序算法與代碼實現

代碼實現如下:

一遍記住Java常用的八種排序算法與代碼實現


分享到:


相關文章: