1. 程式人生 > >排序算法思路總結

排序算法思路總結

數組長度 選擇排序 相對 復雜 依次 總結 左右 算法思路 默認

好久不學算法了,好多東西都忘了,所以回來整理一下原來學過的東西,這裏排序都默認以升序為例

先說3個簡單的,時間復雜度為O(n^2)

1.冒泡排序

將相鄰兩個數進行比較,如果後者較小,則交換,這樣每次結束後,都能將第i大的數放到正確的位置

2.選擇排序

第一次在0~n-1的範圍內尋找最小值,將其放到0號位置上,

第二次則在1~n-1的範圍內尋找最小值,將其放在1號位置上,

而後以此類推

3.插入排序

第一次將1號位置上的數與0號位置上的數進行比較,若1號位置上的數較小,則交換

第二次將2號位置上的數先與1號位置上的數進行比較,若其比1號位置上的數小,則交換,之後再與0號位置進行比較,若依舊比較小,則交換

而後以此類推

後面講相對麻煩些的4種算法

4.歸並排序

這種算法是把數組中的數先看成若幹個長度為1的區間,然後對相鄰的長度為2的區間進行排序,之後再對長度為4的區間進行排序,之後依次類推

5.快速排序

這種算法是在數組中隨機選擇一個數,將整個數組劃分為兩個區域,之後對左右兩個區域再次進行上述操作,依次遞歸,最終就能得到排好序的數組

6.堆排序

先將數組元素構成一個大根堆

先將堆頂與堆末進行交換,將放在堆末的元素取出,之後對堆進行大根堆調整

重復上述過程,直至堆中沒有元素,則可得到排好順序的數組

7.希爾排序

希爾排序是一個優化的插入排序,其關鍵在於步長的選擇,以數組長度為8為例,第一次可選擇步長為3進行排序

之後選擇步長為2進行排序,再選擇步長為1進行排序

排序算法思路總結