基礎排序演算法之快速排序

2021-09-29 15:37:23 字數 1064 閱讀 5315

基礎思想:分治; 選首元素作為key值,迴圈比較,比其小的元素放左側,比其大的放右側;

分成的兩個數列,遞迴重複上述步驟;

#include#includeusing namespace std;

//快速排序 時間複雜度 o(n*log n)

/*從數列取乙個數作為key值(一般取第乙個數 i);

從右邊遍歷找到第乙個比key小的數j,取出這個數放到key值的數列的位置i,i++;

從左邊遍歷找到第乙個比key大的數i, 取出這個數放到j 的位置, i++

重複直到 i==j, 將key值放到數列的 i 的位置;

遞迴呼叫i左邊和右邊的兩個子數列,直至 各個區間只有乙個數

*/void my_swap(int& first, int& second)

void quicksort(vector& vec,int left, int right)

//直到 i==j,vec[i]出現乙個坑,將key_val的值填到這個坑中

vec[i] = key_val;

//對左右兩個小數列,遞迴重複上述步驟,直至各區間只有乙個數

quicksort(vec, left, i - 1);

quicksort(vec, i + 1, right);

}int main()

; cout << "raw val is:\n";

for (auto i : arr)

cout << i << "\t";

cout << endl;

quicksort(arr,0,arr.size()-1);

cout << "quicksorted val is:\n";

for (auto i : arr)

cout << i << "\t";

cout << endl;

system("pause");

return 0;

}

輸出:

演算法基礎之排序 快速排序

上一節簡單介紹了一下常用的插入排序,這一節,我們來看看實際中針對大量資料最常用的快速排序演算法。快速排序演算法採用的是一種分治的策略,其的特點就是。快!演算法的平均時間複雜度為o nlog n 快速排序演算法處理公升序排序的思路大致如下 1 選中待排序陣列中最左端的數為參考數 2 從陣列的右端開始向...

基礎演算法之快速排序演算法

快速排序基本思想是 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。比如序列 6,8,1,4,3,9 選取6為基準數key 不會變的 然後從右往左遍...

基礎排序演算法 快速排序

快速排序大家應該都知道,快速排序是一種不穩定的演算法,運氣差可以降速降到冒泡的速度,運氣好能快到比歸併還快的速度。首先,快速排序需要選擇乙個x,這個數很多人稱為基準。剛開始的時候選擇 a 0 當x,讓i l,j r 剛開始的時候l和r分別為最左邊和最右邊。1 讓j減小,直到遇到 i 或者找到乙個小於...