我們先來看看幾種排序的結構圖:
排序是否穩定
比如:排序前:
25 7 6 4
29 3
排序後:22
3 4 5 6 7 9
排序前藍2在紅
2前面,排序後藍
2依然在紅
2前面,則所用的排序方法是穩定的。
如果排序後,紅
2有可能在藍
2前面,那麼所用的排序方法是不穩定的
下面說說前面幾種排序的時間複雜度,不懂的話可以這麼來想:
簡直冒快歸隊希爾
簡:簡單選擇(直接選擇)
直:直接插入
冒:冒泡
快:快速
歸:歸併
隊:堆再來看看這張表:
整理:穩定性
排序方法
時間複雜度
空間複雜度
最好平均
最壞輔助空間不簡
n2 n2
n2 1穩
直nn2
n2 1穩
冒nn2
n2 1不
快nlog2n
nlog2nn2
nlog2n穩歸
nlog2n
nlog2n
nlog2nn不
堆nlog2n
nlog2n
nlog2n1不
希爾nn1.3 n2
1穩基數
平均一樣的放在一起,這樣看起來也方便了很多。
三 排序演算法
所有例子都是公升序排序。資料分成兩部分 已排序和待排序。排序過程中,資料移動分為兩種 1.直接移動 移動資料的儲存位置,消耗時間 2.邏輯移動 改變指向這些資料的指標 特點 遍歷待排序資料,把最小值與起始資料 最左邊 交換位置 次數 第一輪n 1次,第k輪n k次 步驟 1.如果待排序資料大於0,則...
(三)排序演算法之選擇排序
選擇排序和之前說的氣泡排序和插入排序套路差不多,都是將陣列分隔為已排序和未排序子陣列,主要區別在於元素選取和放入。選擇排序是從未排序陣列中選最小 或最大 的乙個放入已排序的陣列後。下面用 分隔已排序和未排序陣列,如 待排序資料 7,0,2,8,1 一開始有序陣列是空的 一次排序 0 7,2,8,1 ...
STL 常用演算法(三)排序演算法
演算法簡介 功能描述 函式原型 include include void myprint int val void test01 intmain 函式原型 include include include class myprint void test01 for each v.begin v.end...