快速排序演算法 總結筆記

2021-09-13 10:46:09 字數 1325 閱讀 1815

首先選擇乙個關鍵值key,作為樞軸。一般會將陣列的首個元素選定為key,樞軸。為什麼說是樞軸?是因為待會我們要以這個key為界,把所有小於等於key值的陣列元素放置到key的左側;把所有大於等於key值的元素移到陣列的右側。key,充當了乙個臨界軸的作用,所以叫它樞軸並不為過。

定義兩個變數,first,last,分別代表待排序序列的起始位置和結束位置。

不斷重複這麼乙個過程:【從序列右側開始(由last記錄的位置),將陣列中的元素與key值逐一比較,找到第乙個比key小的元素,將其放置到first位置處;從序列左側開始(由first記錄的位置),將陣列中的元素與jey值逐一比較,找到第乙個比key大的元素,將其放置到last位置處】,直到first==last。通過上述的過程,可以實現把所有小於等於key值的陣列元素放置到key的左側;把所有大於等於key值的元素移到陣列的右側,這麼乙個功能。

現在以key樞軸為界,得到了兩部分,key左邊的所有元素都比key小,key右邊的所有元素都比key大。那麼怎麼實現把陣列中所有的元素都有序排列呢?似乎有人已經脫口而出了——利用遞迴。現在我把**給大家,新手可以細細體悟。

//快速排序。

#includeusing namespace std;

void quicksort(int a, int low, int high)

int first = low;

int last = high;

int key = a[first];//一般用序列的第乙個元素作為樞軸。

while(first < last)

a[first] = a[last];//將第乙個比key小的元素移到低處。

while(first < last && a[first] <= key)

a[last] = a[first];//將第乙個比key大的元素移到高處。

}a[first] = key;//樞軸元素記錄到位。

quicksort(a, low, first-1);//以樞軸為界劃分兩極。低一極。

quicksort(a, first+1, high);//以樞軸為界劃分兩極。高一極。

}int main()

; quicksort(a, 0, sizeof(a)/sizeof(a[0])-1);//快速排序

for(int i = 0; i < sizeof(a)/sizeof(a[0]); i++)

return 0;

}

排序演算法總結(快速排序)

終於不用改 了,希望文章大修順利!穩定的演算法 不穩定的演算法 內部排序 排序過程不涉及內 外存交換 外部排序 排序過程有內 外存交換 in place sort 不占用額外記憶體或占用常數的記憶體 插入排序 選擇排序 氣泡排序 堆排序 快速排序。out place sort 歸併排序 計數排序 基...

排序演算法總結 快速排序

快速排序的一般步驟如下 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。來自於 啊哈!演算法 這裡需要解釋一下為什麼每次交換的時候都需要右邊的哨兵先走 最主要是相遇點的問題,演算法的...

排序演算法總結 快速排序

前面說的氣泡排序是一種交換排序。交換排序還有一種演算法,就是快速排序演算法。快速排序的核心思想是分而治之。意思就是選出乙個基準 可以是第乙個元素,也可以是最後乙個。為了方便我們選取第乙個 將小於這個基準的全部元素都放在這個基準的左邊,大於這個基準的全部元素都放在基準的右邊。然後分別對左右兩個陣列在進...