1.直接插入排序
經常碰到這樣一類排序問題:把新的資料插入到已經排好的資料列中。
将第一個數和第二個數排序,然後構成一個有序序列
将第三個數插入進去,構成一個新的有序序列。
對第四個數、第五個數……直到最後一個數,重複第二步。

如何寫寫成代碼:
首先設定插入次數,即循環次數,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執行簡單插入排序。
如何寫成代碼:
首先确定分的組數。
然後對組中元素進行插入排序。
然後将length/2,重複1,2步,直到length=0為止。
3.簡單選擇排序
常用于取序列中最大最小的幾個數時。
(如果每次比較都交換,那麼就是交換排序;如果每次比較完一個循環再交換,就是簡單選擇排序。)
周遊整個序列,将最小的數放在最前面。
周遊剩下的序列,将最小的數放在最前面。
重複第二步,直到隻剩下一個數。
首先确定循環次數,并且記住目前數字和目前位置。
将目前位置後面所有的數與目前數字進行對比,小數指派給key,并記住小數的位置。
比對完成後,将最小的值與第一個數的值交換。
重複2、3步。
4.堆排序
對簡單選擇排序的優化。
将序列建構成大頂堆。
将根節點與最後一個節點交換,然後斷開最後一個節點。
重複第一、二步,直到所有節點斷開。
5.冒泡排序
一般不用。
将序列中所有元素兩兩比較,将最大的放在最後面。
将剩餘序列中所有元素兩兩比較,将最大的放在最後面。
設定循環次數。
設定開始比較的位數,和結束的位數。
兩兩比較,将最小的放到前面去。
重複2、3步,直到循環次數完畢。
6.快速排序
要求時間最快時。
選擇第一個數為p,小于p的數放在左邊,大于p的數放在右邊。
遞歸的将p左邊和右邊的數都按照第一步進行,直到不能遞歸。
7.歸并排序
速度僅次于快排,記憶體少的時候使用,可以進行并行計算的時候使用。
選擇相鄰兩個數組成一個有序序列。
選擇相鄰的兩個有序序列組成一個有序序列。
重複第二步,直到全部組成一個有序序列。
8.基數排序
用于大量數,很長的數進行排序時。
将所有的數的個位數取出,按照個位數進行排序,構成一個序列。
将新構成的所有的數的十位數取出,按照十位數進行排序,構成一個序列。