重新教自己學演算法之遞迴排序 快速排序(四)

2021-07-02 18:44:39 字數 970 閱讀 6328

int _quick_sort(int

array, int start, int end)

while(i < j && array[i] <= temp_value)

i++;

if(i < j)

}array[i] = temp_value;

return i;

}void quick_sort(int

array, int start, int end)

快速排序是找出乙個元素(理論上可以隨便找乙個)作為基準(pivot),然後對陣列進行分割槽操作,使基準左邊元素的值都不大於基準值,基準右邊的元素值 都不小於基準值,如此作為基準的元素調整到排序後的正確位置。遞迴快速排序,將其他n-1個元素也調整到排序後的正確位置。最後每個元素都是在排序後的正 確位置,排序完成。所以快速排序演算法的核心演算法是分割槽操作,即如何調整基準的位置以及調整返回基準的最終位置以便分治遞迴。

對陣列進行排序:

一趟排序如下:

[0,3,6,2,1,9,3,4,8,,0] //從該序列最後乙個數開始比較,0<5:將5位置的數賦值為0

[0,3,6,2,1,9,3,4,8,6] //有不滿足條件的,賦值後改變比較順序,從開始比較,0<5,繼續;3<5,繼續;6>5,將上乙個數0位置的數賦值為6

[0,3,4,2,1,9,3,4,8,6] //重複上面步驟,從6位置處開始比較

[0,3,4,2,1,9,3,9,8,6] //從4位置處開始比較

[0,3,4,2,1,3,3,9,8,6] //當比較兩數的下標相同時,插入中間值。

[0,3,4,2,1,3,5,9,8,6] //完成一趟排序。

下面分別對[034213], [986]進行相同方法遞迴排序,即可得到結果。

若不明白,可仔細看**實現。

總結:1:驗證引數的合法性

2:理解快排的思想步驟,知道在什麼地方退出比較。

重新教自己學演算法之遞迴排序 堆排序(六)

堆排序,快速排序,歸併排序都是遞迴排序,且時間都為o nlog n 先講解一下什麼是資料結構中的二叉堆。定義 二叉堆是完全二叉樹或者近似完全二叉樹,滿足兩個特性 1 父節點的鍵值總是大於或等於 小於或等於 任何乙個子節點的鍵值。2 每個節點的左子樹和右子樹都是乙個二叉堆。當父節點的鍵值總是大於等於任...

遞迴演算法之快速排序法

快速排序演算法的所用的方法是左右掃瞄法 當拿到一排無序的數列時,快速排序採取的方法是先找乙個樞軸 即乙個中間值,當然這個值不一定剛好就是這組數的中值 採用左右交替掃瞄法進行排序。左右交替掃瞄法是 首先從右往左掃瞄這組值,把每乙個值都與樞軸比較,如果大於等於樞軸就繼續向左掃瞄,一旦小於樞軸就把這個值和...

快速排序 遞迴演算法

快速排序原理 從乙個陣列中任意挑選乙個元素 通常為最左邊的元素 作為基準數,將剩下的元素和基準數進行比較,將小於等於中軸元素的放到基準數的左邊,經大於 中軸元素的放到基準數的右邊,然後以當前基準數的位置為界,將左半部分陣列和右 半部分陣列堪稱兩個新的陣列,重複上述操作,直到子陣列的元素個數小於等於1...