背景:給直角座標系下的座標(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...