排序算法思路總結
阿新 • • 發佈:2018-01-28
數組長度 選擇排序 相對 復雜 依次 總結 左右 算法思路 默認
好久不學算法了,好多東西都忘了,所以回來整理一下原來學過的東西,這裏排序都默認以升序為例
先說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進行排序
排序算法思路總結