快速排序的遞迴實現

2021-05-28 03:04:57 字數 1203 閱讀 6826

快速排序通常是排序的最佳選擇,因為其平均的執行時間為o(nlgn )。最壞情況下每次劃分都產生兩個分別包含n-1個元素和乙個元素的區域,此時時間複雜度為o(n²)。最佳情況下每次劃分都將陣列分成兩個長度差不多的區域,此時時間複雜度與平均效能差不多。

快速排序的遞迴形式如下:

void do_quick_sort( int array, int low, int high )

}

快速排序採用分治思想,其中partition函式實現的就是「分」,它將array[low,high]分成兩部分,其中前一部分中的元素均小於後一部分中的元素。然後遞迴呼叫快速排序對分出來的兩部分進行快速排序。

partition函式的**如下:

int partition( int array, int low, int high )

array[low] = current;

return low;

}

該函式可以分為4步理解:

1.從後向前尋找第乙個小於current的元素,找到後將它賦值給array[low](array[low]已經由current儲存,這也是劃分的基準值),

2.然後從前向後尋找第乙個大於current的元素,找到後將它賦值給array[high],

3.重複1、2,直至low==high,

4.將current賦值給array[low](或array[high]),這時current前面的值都小於等於它,後面的值都大於等於它,這樣array就被分成的兩部分

有幾個問題需要注意:

1.不論從前向後查詢或是從後向前查詢都要判斷low2.由於是遞迴演算法,所以程式中必須要有遞迴結束的條件,即:low>high,所以如果low快速排序還有幾個優化版本,隨機化快排就是其中之一,這樣是期望對陣列的劃分更加對稱,避免最壞情況的發生。在隨機化版本中,只需對partition函式進行修改就可以了。

int randomized_partition( int array, int low, int high )

return partition( array, low, high );

}

通過隨機指定[low,high]中的元素作為主元,可以獲得較好的平均情況效能。很多人認為,快排的隨機化版本是對足夠大的輸入的理想選擇。

快速排序 遞迴實現

快速排序演算法 用到了 分治法 遞迴演算法 package com.xiahui public class quicksort quicksort quicksort new quicksort quicksort.quicksort a,0,6 for int i 0 i a.length i p...

快速排序 遞迴實現

快速排序演算法 用到了 分治法 遞迴演算法 package com.xiahui public class quicksort quicksort quicksort new quicksort quicksort.quicksort a,0,6 for int i 0 i a.length i p...

遞迴實現快速排序

所有查詢中hash查詢效率最高,在所有排序中,快速排序的效率也是最高的。採用遞迴函式的方法來實現快速排序!include include include intquick sort int int,int int partion int int,int int main int argc,const...