快速排序的演算法的核心思想是設定乙個值,把比這個值大的往右「扔」,比這個值小的往左「扔」。
陣列快速排序的過程:
設定兩個變數i、j,排序開始時:i=0,j=n-1;(n為排序總數)
以陣列中的第乙個元素作為比較的值,賦給變數key,即key=a[0];
首先從j往前搜尋,即從後往前(–j),找到第乙個小於key的值a[j],將a[j]與a[i]進行互換;
然後再從i往後搜尋,即從前往後(++i),找到第乙個大於key的值a[i],將a[i]與a[j]進行互換;
重複第三、四步,直到i等於j。此時就能確保序列中key的左邊全是比key小的值,key的右邊全是比key大的值。然後再對左右兩邊分別遞迴執行上面幾個步驟,直到排序結束。
#include void quicksort (int *,int,int);//函式宣告,快速排序//
int main(int argc,const char *ar**)
; quicksort(a,0,20);/*引用起來很簡單,0為第乙個元素的下表,20為最後乙個元素的下表*/
printf("最終排序結果為:\n");
for(i=0;i<=20;++i)
printf("\n");
return 0;
}void quicksort(int *a,int low,int high)
while(lowa[high])
while(low=a[low])
if(key}
a[low]=key;
quicksort(a,i,low-1);
quicksort(a,low+1,j);
}
基礎排序演算法 快速排序
快速排序大家應該都知道,快速排序是一種不穩定的演算法,運氣差可以降速降到冒泡的速度,運氣好能快到比歸併還快的速度。首先,快速排序需要選擇乙個x,這個數很多人稱為基準。剛開始的時候選擇 a 0 當x,讓i l,j r 剛開始的時候l和r分別為最左邊和最右邊。1 讓j減小,直到遇到 i 或者找到乙個小於...
演算法基礎 快速排序
要求 10分鐘內寫出快排!之前筆試用到排序演算法,總是想用快排但是又不能在規定時間寫出來,歸根到底還是快排的邏輯步驟沒有搞清,所以才導致每次失敗!徹底搞清快排動作邏輯,這樣即使長時間不用也能臨時寫出來!思路 1.就像選擇排序每排一次序排好最小 大值一樣,快速排序每排一次序 會 將中軸值 預設取陣列第...
演算法基礎 快速排序
分治法 選擇分界點 arr l arr mid arr r 調整陣列區間 左半部分 分界點,右半部分 分界點 遞迴處理左半部分,遞迴處理右半部分 3.遞迴處理 quicksort arr,j 1,r intmain 的驗證 1.第k小的數 題目鏈結 include include using nam...