快速排序大家應該都知道,快速排序是一種不穩定的演算法,運氣差可以降速降到冒泡的速度,運氣好能快到比歸併還快的速度。
首先,快速排序需要選擇乙個x,這個數很多人稱為基準。
剛開始的時候選擇 a[0]當x,讓i=l,j=r 。剛開始的時候l和r分別為最左邊和最右邊。
1、讓j減小,直到遇到 i 或者找到乙個小於等於x的數字a[j]。如果找到了那麼就讓a[i]=a[j],然後 i ++。
2、讓 i 增加,直到遇到j或者這找到乙個比x大的數字a[i]。如果找到了那麼就讓a[j]=a[i],然後 j --。
3、重複上述步驟,直到 i==j。(由於1、2兩步,i、j最後肯定是相等的)
4、讓上述步驟在 區間 [l,j-1] 和 [j+1,r] 繼續進行。
嗯,就是這樣。**如下:
int adjustarray(int s,int l,int r)
{ int i=l,j=r;
int x=s[l];
while(i=x)
--j;
if(i
演算法基礎 快速排序
要求 10分鐘內寫出快排!之前筆試用到排序演算法,總是想用快排但是又不能在規定時間寫出來,歸根到底還是快排的邏輯步驟沒有搞清,所以才導致每次失敗!徹底搞清快排動作邏輯,這樣即使長時間不用也能臨時寫出來!思路 1.就像選擇排序每排一次序排好最小 大值一樣,快速排序每排一次序 會 將中軸值 預設取陣列第...
快速排序演算法 基礎
快速排序的演算法的核心思想是設定乙個值,把比這個值大的往右 扔 比這個值小的往左 扔 陣列快速排序的過程 設定兩個變數i j,排序開始時 i 0,j n 1 n為排序總數 以陣列中的第乙個元素作為比較的值,賦給變數key,即key a 0 首先從j往前搜尋,即從後往前 j 找到第乙個小於key的值a...
演算法基礎 快速排序
分治法 選擇分界點 arr l arr mid arr r 調整陣列區間 左半部分 分界點,右半部分 分界點 遞迴處理左半部分,遞迴處理右半部分 3.遞迴處理 quicksort arr,j 1,r intmain 的驗證 1.第k小的數 題目鏈結 include include using nam...