排序的穩定性和複雜度
不穩定:
選擇排序(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的元素不在排序區間內 ...