天天看點

一遍就可以讓你記住的八種java常用的排序方法與代碼實作

1.直接插入排序

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

将第一個數和第二個數排序,然後構成一個有序序列

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

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

一遍就可以讓你記住的八種java常用的排序方法與代碼實作

如何寫寫成代碼:

首先設定插入次數,即循環次數,for(int i=1;i<length;i++),1個數的那次不用插入。

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

從最後一個數開始向前循環,如果插入數小于目前數,就将目前數向後移動一位。

将目前數放置到空着的位置,即j+1。

代碼實作如下:

2.希爾排序

對于直接插入排序問題,資料量巨大時。

将數的個數設為n,取奇數k=n/2,将下标內插補點為k的書分為一組,構成有序序列。

再取k=k/2 ,将下标內插補點為k的書分為一組,構成有序序列。

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

一遍就可以讓你記住的八種java常用的排序方法與代碼實作

如何寫成代碼:

首先确定分的組數。

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

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

3.簡單選擇排序

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

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

周遊整個序列,将最小的數放在最前面。

周遊剩下的序列,将最小的數放在最前面。

重複第二步,直到隻剩下一個數。

一遍就可以讓你記住的八種java常用的排序方法與代碼實作

首先确定循環次數,并且記住目前數字和目前位置。

将目前位置後面所有的數與目前數字進行對比,小數指派給key,并記住小數的位置。

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

重複2、3步。

4.堆排序

對簡單選擇排序的優化。

将序列建構成大頂堆。

将根節點與最後一個節點交換,然後斷開最後一個節點。

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

一遍就可以讓你記住的八種java常用的排序方法與代碼實作

5.冒泡排序

一般不用。

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

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

一遍就可以讓你記住的八種java常用的排序方法與代碼實作

設定循環次數。

設定開始比較的位數,和結束的位數。

兩兩比較,将最小的放到前面去。

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

6.快速排序

要求時間最快時。

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

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

一遍就可以讓你記住的八種java常用的排序方法與代碼實作

7.歸并排序

速度僅次于快排,記憶體少的時候使用,可以進行并行計算的時候使用。

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

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

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

一遍就可以讓你記住的八種java常用的排序方法與代碼實作

8.基數排序

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

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

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

繼續閱讀