演算法基礎(三) 排序

2021-06-06 20:54:58 字數 814 閱讀 2461

我們先來看看幾種排序的結構圖:

排序是否穩定

比如:排序前:

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...