資料結構 排序 快速排序

2021-10-07 15:42:02 字數 1354 閱讀 4593

~快速排序在平均情況下是效果最好的排序演算法~

每趟子表的排序都是從兩頭向中間交替逼近,接下來舉乙個例子

(sorry,上面這個圖的6和5的位置畫反啦,快速排序全域性有序,一趟排序便可以確定基準值的最終位置) 

類別排序方法

最好時間

最壞時間

平均時間

空間複雜度

穩定性序列特徵

適用於插入排序

直接插入排序

n(順序)

n2(逆序)n21

穩定有序序列+待排序元素+無序序列

基本有序/n很小

折半插入排序

穩定有序序列+待排序元素+無序序列

希爾排序

與d相關

n2n1.3

1不穩定

縮小增量,組內直接插入排序

順序儲存

交換排序

氣泡排序

n(順序)

n2逆序n21

穩定無序序列+最大值/最小值+無序序列

快速排序

無序有序n2

逆序 nlogn

平均:logn

最壞:n

不穩定較小無序序列+基準值+較大有序序列

非自然排序

越亂越好

更進一步說時間複雜度最好的情況:每一趟找到的樞紐都把該組分為左右相等的兩個小組(遞迴樹盡可能平衡)

程式設計注意事項:

1.為了處理快排的輸出,採用引用傳值,直接在原來的陣列上移動,不拷貝

2.注意大於等於/小於等於

3.partition函式裡面有三個while迴圈

int partition(vector&a, int low, int high) 

a[low] = pivot;//迴圈結束時low==high

return low;

//可以看到不斷地利用pivot動態地交換low,和high的值,所以是交換排序

資料結構 排序 快速排序

對序列 47,31,83,91,57,18,96,16 進行快速排序 首元素為基準 第二趟排序結果是 正確答案 b 你的答案 c 錯誤 18 31 16 47 57 91 96 83 16 31 18 47 57 91 96 83 16 18 31 47 57 91 96 83 16 18 31 4...

資料結構排序 快速排序

快速排序是對氣泡排序的改進,它的基本思想是通過一趟排序將資料分成兩部分,一部分中的資料都比另一部分中的資料小,再對這兩部分中的資料再排序,直到整個序列有序,如下圖所示。快排的遞迴實現 1 include 2 include 3 4intn 5 6 7 分割使樞軸記錄的左邊元素比右邊元素小8 9int...

資料結構 快速排序

include include typedef struct qnode typedef struct qlist void qlist init qlist int int void qlist print qlist int part sort qlist int int void quick ...