該方法的基本思想是:
1.先從數列中取出乙個數作為基準數。
2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重複第二步,直到各區間只有乙個數。
以乙個陣列作為示例,取區間第乙個數為基準數。
我先上個圖讓大家感受一下,畫了很長時間,但是畫的還是很差,將就下看看吧
對挖坑填數進行總結
1.i =left; j =right ; 將基準數挖出形成第乙個坑a[i]。
2.j–由後向前找比它小的數,找到後挖出此數填前乙個坑a[i]中。
3.i++由前向後找比它大的數,找到後也挖出此數填到前乙個坑a[j]中。
4.再重複執行2,3二步,直到i==j,將基準數填入a[i]中。
照著這個總結很容易實現挖坑填數的**:
public
static
void
main(string args) ;
quick_sort1(arr,0,arr.length-1);
for(int i=0;iout.print(arr[i]+" ");
}}
public
static
void
quick_sort1(int arr,int left,int right)
while(i//從右往左開始掃瞄,小於temp,i++
i++;
if(i////找到大於temp的,將它填入上乙個坑中,j--
j--;}}
arr[i] = temp; //最後將temp填入最後乙個坑中
quick_sort1(arr,left,i-1); //遞迴,完成左邊的排序
quick_sort1(arr,i+1,right); //遞迴,完成右一半的排序
}}
快速排序還有很多改進版本,如隨機選擇基準數,區間內資料較少時直接用另的方法排序以減小遞迴深度。有興趣的童鞋可以再深入的研究下。
注:有的書上是以中間的數作為基準數的,要實現這個方便非常方便,直接將中間的數和第乙個數進行交換就可以了。
快速排序 快速搞定
快速排序由於排序效率在同為 o n logn 的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想 it公司都喜歡考這個,還有大大小的程式方面的考試如軟考,考研中也常常出現快速排序的身影。總的說來,要直接默寫出快速排序還是有一定難度的,因為本人就自己的理解對快速排序作了下白話解釋,希望對大家...
「挖坑填坑」理解快速排序
快速排序的基本思路 找乙個基準元素,對陣列進行調整,調整的標準是,這個基準元素的左邊存放的都是比這個元素小的,右邊都是比這個元素大的。然後分而治之,對左右兩邊的子陣列利用同樣的規則調整,調整到每乙個子陣列中都只有乙個元素時結束。基本思想很簡單,主要是理解如何在確定基準元素之後,對陣列 子陣列 進行調...
快速排序(填坑與交換)
填坑 交換注意 填坑的本質就是交換,只不過交換把兩次填坑合併為一次交換過程而已。我自己也對 進行了梳理 public void quicksort int nums,int low,int high if i while iif i i j,指向主元的最終位置,用主元填這個坑 nums i curr...