填坑法 快速搞定快速排序演算法

2021-07-15 01:18:15 字數 1072 閱讀 2493

該方法的基本思想是:

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...