穩定性
如果排序後,相對位置不變,表示這個算法是穩定的。
插入排序
直接插入排序
插入排序就是把後面的數插入前面已拍好序的部分。
穩定的
希爾排序
當數組比較長的時候,直接插入排序效率不高,可能需要多次交換,研究發現,直接排序在數組長度比較小的時候,效率比較高。這個規律是希爾發現的,所以希爾排序就是解決直接插入排序的在數組比較長的時候效率不高的問題。
希爾排序的大概思路是,按照步長 k 將原來的 k 組,第一組爲 0,k,2*k … 把這 k 組,每組做一次直接插入排序。然後減小步長,然後對新的組做直接插入排序,直到步長爲 1 。
交換排序
冒泡
2 層循環,外層循環表示要比較的輪數,內層循環表示每輪比較的時候,如果左邊比右邊大,就交換。這樣一輪下來,最右邊的就是最大的。就像氣泡在水裏面冒出來。
是穩定的。
快排
某個元素作爲參考,使比此元素小的都在此元素左邊,比此元素大的都在此元素右邊。然後分別對左邊部分和右邊部分做相同的處理。
一般以中間元素作爲參照,然後有 left 和 right 分別指向左右,依次遍歷,當 left 比參照大的時候互相交換,然後從 right 開始向左掃描,當 right 比參照小的時候,相互交換。然後以此循環,直到 left == right ,表示一輪掃描完成,然後分別把參照的左右兩部分按照之前的規則掃描。
一般遞歸實現。
不穩定
選擇排序
簡單選擇排序
和冒泡有些類似, 2 層循環,外層循環表示需要查找的輪數,內層循環表示每輪循環的時候,找出最小的和剩餘的位排序部分的第一個。
堆排序
構造一個堆,使父節點永遠是左右子樹裏面最大或者最小的。
歸併排序
把數組分爲 2 部分,然後依次排序,拍好序後合併。
可遞歸實現
基數排序
把所有的數,高位不足的補 0 ,使得每個元素的長度一致,然後從低位開始,安裝數值的大小排序。最高位排好序後,就完成了排序。
參考資料:算法和數據結構學習-八種必需掌握的排序