1.1 存在乙個需要排序的無序序列a[54 38 96 23 15 72 60 45 83],將序列抽象為a[low—mid—high];
1.2 將序列中的第乙個記錄 54 作為乙個基準,pivot = a[low],此時無序序列為
a[__ 38 96 23 15 72 60 45 83];
i j
1.3 用j
從序列的右邊開始往左找,在沒有遇到i
時,找到第乙個比基準54小的值後停下來,找到了45;將45放在第乙個空位置
a[45 38 96 23 15 72 60 __ 83]
i j
1.4 然後用i
從序列的左邊開始往右找,在沒有遇到j
時,找到第乙個比基準54大的值後停下來,找到了96;將96放在空的位置
a[45 38 __ 23 15 72 60 96 83]
i j
1.5 繼續從j
停止的位置從右向左走,在沒有遇到i
時,找到第二個比基準54小的值後停下來,找到了15;將15放在空的位置上
a[45 38 15 23 __ 72 60 96 83]
i j
1.6 繼續從i
停止的位置從左向右走,在沒有遇到j
時,找比基準大的值,此時遇到了j
,此時把基準值54放在ij相遇的位置。
a[45 38 15 23 __ 72 60 96 83]
ij
a[45 38 15 23 54 72 60 96 83]
ij
可以看到,此時序列大概有序了,比54小的都排在了左邊,比54大的都排在了右邊。
1.7 接下來基準54不參加排序,將54左邊的序列[45 38 15 23]再看做是乙個無序序列再按上述方法排序,
同樣將54右邊的序列[72 60 96 83]也按上述方法排序,直到整個序列有序。
void quick_sort(int a , int low , int high)
a[i]= pivot;
quick_sort(a , low , i-1); //基數左邊的序列進行快速排序
quick_sort(a , i+1 , high); //基數右邊的序列進行快速排序
}}void main()
; quick_sort(data , 0 , 8);
for(i =0 ; i < 9; i++)
cout《快速排序是不穩定的。
快速排序最理想情況下的演算法時間複雜度是o(nlogn),最壞位o(n^2)。
資料結構 排序 快速排序
對序列 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...
資料結構 排序 快速排序
快速排序在平均情況下是效果最好的排序演算法 每趟子表的排序都是從兩頭向中間交替逼近,接下來舉乙個例子 sorry,上面這個圖的6和5的位置畫反啦,快速排序全域性有序,一趟排序便可以確定基準值的最終位置 類別排序方法 最好時間 最壞時間 平均時間 空間複雜度 穩定性序列特徵 適用於插入排序 直接插入排...
資料結構排序 快速排序
快速排序是對氣泡排序的改進,它的基本思想是通過一趟排序將資料分成兩部分,一部分中的資料都比另一部分中的資料小,再對這兩部分中的資料再排序,直到整個序列有序,如下圖所示。快排的遞迴實現 1 include 2 include 3 4intn 5 6 7 分割使樞軸記錄的左邊元素比右邊元素小8 9int...