演算法 sort排序(彙總)

2021-09-25 17:24:06 字數 1231 閱讀 1501

排序的穩定性和複雜度

不穩定:

選擇排序(selection sort)— o(n2)

快速排序(quicksort)— o(nlogn) 平均時間, o(n2) 最壞情況; 對於大的、亂序串列一般認為是最快的已知排序

堆排序 (heapsort)— o(nlogn)

希爾排序 (shell sort)— o(nlogn)

基數排序(radix sort)— o(n·k); 需要 o(n) 額外儲存空間 (k為特徵個數)

穩定:

插入排序(insertion sort)— o(n2)

氣泡排序(bubble sort) — o(n2)

歸併排序 (merge sort)— o(n log n); 需要 o(n) 額外儲存空間

二叉樹排序(binary tree sort) — o(nlogn); 需要 o(n) 額外儲存空間

計數排序  (counting sort) — o(n+k); 需要 o(n+k) 額外儲存空間,k為序列中max-min+1

桶排序 (bucket sort)— o(n); 需要 o(k) 額外儲存空間

遍歷陣列,遍歷到i時,a0,a1...ai-1是已經排好序的,然後從i到n選擇出最小的,記錄下位置,如果不是第i個,則和第i個元素交換。此時第i個元素可能會排到相等元素之後,造成排序的不穩定。

氣泡排序的名字很形象,實際實現是相鄰兩節點進行比較,大的向後移乙個,經過第一輪兩兩比較和移動,最大的元素移動到了最後,第二輪次大的位於倒數第二個,依次進行。這是最基本的氣泡排序,還可以進行一些優化。     

遍歷陣列,遍歷到i時,a0,a1...ai-1是已經排好序的,取出ai,從ai-1開始向前和每個比較大小,如果小於,則將此位置元素向後移動,繼續先前比較,如果不小於,則放到正在比較的元素之後。可見相等元素比較是,原來靠後的還是拍在後邊,所以插入排序是穩定的。

當待排序的資料基本有序時,插入排序的效率比較高,只需要進行很少的資料移動。

快速排序首先找到乙個基準,下面程式以第乙個元素作為基準,然後先從右向左搜尋,如果發現比基準小的數,則和基準交換,然後從左向右搜尋,如果發現比基準大的數,則和基準交換,一直到左邊大於右邊,此時基準左邊的數都比它小,而右邊的都比它大,此時基準的位置就是排好序後應該在的位置,此時pivot將陣列劃分為左右兩部分,可以遞迴採用該方法進行。快排的交換使排序成為不穩定的。

持續更新!!!!2019.8.1

sort排序演算法集合

public class sort quicksortarray array 氣泡排序 效率 o n 適用於排序小列表 private static void bubblesortarray int array println array 選擇排序 效率 o n 適用於排序小列表 private s...

STL(排序演算法sort)

標頭檔案 include 1.對基本型別的陣列從小到大排序 sort 陣列名 n1,陣列名 n2 n1和n2都是int型別的表示式,可以包含變數 如果n1 0,則 n1可以不寫 將陣列中下標範圍為 n1,n2 的元素從小到大排序 如 int a sort a,a 7 對整個陣列從小到大排序 int ...

STL排序演算法sort

要使用stl中的演算法,需要在程式標頭檔案引入 include 1.對基本型別的陣列從小到大排序 sort 陣列名 n1,陣列名 n2 n1和n2都是int型別的表示式,可以包含變數 如果n1 0,則 n1可以不寫 將陣列中下標範圍為 n1,n2 的元素從小到大排序。下標為n2的元素不在排序區間內 ...