快速排序(分治演算法)const
int n = 1e6 + 10
;int
a[n];
//a:待排序陣列,l:排序陣列的起始下標,r:排序陣列的結束下標
void quick_sort(int a,int l,int
r) //
遞迴的終止條件
int x = a[l]; //
選取排序的比較物件
int i = l - 1; //
設定排序的左指標
int j = r + 1; //
設定排序的右指標
while(i//
只要左右指標沒相遇就迴圈進行
do i++; while( a[i]//
左指標向右尋找
do j--; while( a[j]>x ); //
右指標向左尋找
if(i//
如果找到了就交換兩個位置的變數
} quick_sort(a,l,j);
//遞迴左區間
quick_sort(a,j+1,r) //
遞迴右區間
}int
main()
quick(a,
0,n-1
);
for(int i=0;i)
cout
<}
演算法學習 快速排序
1 基本思想 取待排序陣列第乙個數作為參照數,建立left和right陣列,left儲存小於參照數的陣列集合,right儲存大於參照數的陣列集合,然後分別對left和right進行遞迴呼叫排序。2 舉例 11,2,3,43,23,5,6,9,10 取任意的乙個數為基準數 temp arr 0 遍歷陣...
排序演算法學習 快速排序
快速排序 作為氣泡排序的一種改進 通過設定乙個標誌值 通常為陣列第乙個元素pivot 一次快排將陣列分成兩個部分,一部分 公升序 前一部分 小於標誌值pivot,另一部分大於標誌值 公升序 後面部分 各部分內部可以是 通常也是 無序的。通過遞迴地呼叫這樣的排序,使得最終陣列所有的元素有序。一次具體的...
排序演算法學習 快速排序
今天演算法實驗重新學習了快速排序演算法,對此有了一些理解,把它記錄在此以供日後學習。如下為快速排序演算法的被呼叫部分。int get loc int arr int low,int high arr low arr i arr i temp return i 返回基準位置 演算法本質是從後往前與從前...