快速排序筆記

2021-07-09 12:51:19 字數 1033 閱讀 6639

背景:給直角座標系下的座標(x,y)組合排序,用到此,特記之。

最壞時間複雜度:n2

,平均時間複雜度:nlg

n

#include

#include

using

namespace

std;

/** *基於分治思想。

*初始化慢者,比快者慢一步,中樞是最後乙個數;

*慢者始終指向快者最近鄰的比中樞小的值,傾向於往前一步是大值,

* 快者用於找尋第乙個比中樞小的值,傾向於往後 一步是大值;

* 找到後,更新慢者加1,並交換慢者與快者的值,

* 最後 慢者加1與中樞交換。

* @brief partition

* @param vi

* @param low

* @param up

* @return

*/int partition(vector

&vi, int low, int up)

}swap(vi[i+1], vi[up]);

return i+1;

}//c++'s array range should be [low, up], the same as [low, up+1)

void quicksort(vector

&vi, int low, int up)

}void qsort(vector

&vi)

int main();

vector

va(a, a+11);

cout

<<"before quicksort:\n";

for(auto x:va)

cout

<" ";

cout

<<"after quicksort:\n";

for(auto x:va)

cout

<" ";

cout

<"pause");

return

0;}

參考:

快速排序學習筆記

學習資料出處 白話經典演算法系列之六 快速排序 快速搞定 快速排序採用分治策略,其基本思想 1 從數列中選乙個元素x作為基準數 2 分割槽過程,把不小於x的元素放到x的右邊,小於x的元素放到x的左邊 3 再對左右區間重複進行分割槽操作,直到各區間只有乙個數 morewindows總結的 挖坑填數 分...

快速排序演算法筆記

個人理解 1 在一組資料中尋找基準數 2 在左右兩端開始比較,從右開始往左推遇到比基準數小的便停下定位,再從左開始往右推遇到比基準數大的數也停下定位,然後將這兩個數交換位置。4 最後將基準數放到資料中間,右邊留有比基準數大的數,左邊留有比基準數小的數。5 在以基準數為界,將兩邊再次分為兩組資料。6 ...

快速排序quicksort筆記

快排採用了分治法的思想和遞迴的方式進行排序,每次遞迴都會確定乙個位置的數值 此處是位置i 且大於等於左側所有值,小於等於右側所有值。def quicksort l,left,right left 到 right 裡的都是未經過排序的 if left right return i,j left,rig...