1、 根據待排序的資料大小不同,使得排序過程中所涉及的儲存器不同,可分為:
內部排序
外部排序
2、 排序關鍵字可能出現重複,根據重複關鍵字的排序情況可分為:
穩定排序
不穩定排序
3、 對於內部排序,依據不同的排序原則,可分為:
插入排序
交換(快速)排序
選擇排序
歸併排序
計數排序
4、 針對內部排序所需的工作量劃分,可分為:
簡單排序 o(n^2)
先進排序 o(nlogn)
基數排序 o(d*n)
1、 插入排序
直接插入排序
2-路插入排序
希爾排序
2、 交換(快速)排序
氣泡排序
快速排序(快排)
3、 選擇排序
簡單選擇排序
樹形選擇排序
堆排序4、 簡單排序
直接插入排序
shell排序
直接選擇排序
氣泡排序
快速排序
5、先進排序
堆排序
歸併排序
1、 多路平衡歸併排序
2、 置換-選擇排序
3、 最佳歸併樹形排序
每種排序演算法都各有優缺點。因此,在實用時需根據不同情況適當選用,甚至可以將多種方法結合起來使用。
選擇排序演算法的依據
影響排序的因素有很多,平均時間複雜度低的演算法並不一定就是最優的。相反,有時平均時間複雜度高的演算法可能更適合某些特殊情況。同時,選擇演算法時還得考慮它的可讀性,以利於軟體的維護。一般而言,需要考慮的因素有以下四點:
1.待排序的記錄數目n的大小;
2.記錄本身資料量的大小,也就是記錄中除關鍵字外的其他資訊量的大小;
3.關鍵字的結構及其分布情況;
4.對排序穩定性的要求。
設待排序元素的個數為n.
1) 當n較大,則應採用時間複雜度為o(nlog2n)的排序方法:
快速排序、堆排序或歸併排序序。
快速排序:是目前基於比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分布時,快速排序的平均時間最短;
堆排序 : 如果記憶體空間允許且要求穩定性的,
歸併排序:它有一定數量的資料移動,所以我們可能過與插入排序組合,先獲得一定長度的序列,然後再合併,在效率上將有所提高。
2)當n較大,記憶體空間允許,且要求穩定性:歸併排序
3)當n較小,可採用直接插入或直接選擇排序。
直接插入排序:當元素分布有序,直接插入排序將大大減少比較次數和移動記錄的次數。
直接選擇排序 :元素分布有序,如果不要求穩定性,選擇直接選擇排序
4)一般不使用或不直接使用傳統的氣泡排序。
5)基數排序
它是一種穩定的排序演算法,但有一定的侷限性:
1、關鍵字可分解。
2、記錄的關鍵字位數較少,如果密集更好
3、如果是數字時,最好是無符號的,否則將增加相應的對映複雜度,可先將其正負分開排序。
請看下面幾篇
排序演算法分類及演算法
內部排序演算法可以分為三類 1.插入排序 插入排序的基本思想是 每次將乙個待排序的記錄按關鍵字大小插入到前面已排好的子串行中,直到全部記錄插入完成。1 直接插入排序 直接插入演算法 2 折半插入排序 折半插入演算法 3 希爾排序 2.交換排序 交換是指根據表中兩個記錄的比較結果來對換者兩個記錄在表中...
分類演算法的如何選擇
一 選擇分類演算法的步驟 1 首先看是二分類 分類結果只能有兩種,是二分類演算法問題,所有的演算法都可以實現 例如 要麼是0,要麼是1 要麼是好,要麼是壞 還是多分類問題,有多種分類結果的 如果是多分類問題,並不是所有的演算法都可以實現,只能選擇knn,貝葉斯演算法 2 其次看是否要求高可解釋性 不...
選擇排序演算法及優化
選擇排序演算法的思路是 第一次將集合中最小的數挑選出來放在第乙個位置,第二次將集合中最小的數挑選出來放在第二個位置,依此類推。例如 我們需要對進行排序 經過第1次迴圈最小位置是 5 結果是 0,9,5,7,8,2,1,3,4,6 經過第2次迴圈最小位置是 6 結果是 0,1,5,7,8,2,9,3,...