演算法導論習題7 4 快排中堆疊深度的優化

2021-06-07 12:10:08 字數 443 閱讀 1965

//quick_sort

//time complexity is nlgn

//the way is find an element,and partition the array according to this element

#includeusing namespace std;

int partition(int a,int p,int r)

{ int num=a[r];

int i=p-1;

int j,temp;

//partition the array according to num

for(j=p;j<=r-1;j++)

{ if(a[j]

優化的尾遞迴使得快速排序的堆疊深度為lgn。

演算法導論 改進快排(3) 棧深度 習題7 4

問題 快排演算法包含了兩個對自身的遞迴呼叫,每次遞迴呼叫的資訊存入棧中,作業系統給程式的棧空間是有限的,如果陣列很大,則很容易造成棧溢位,這樣程式就崩潰了。思路 quicksort中的第二個遞迴用乙個迴圈控制結構來代替 尾遞迴 實現 include include includeusing name...

演算法導論之快排

快速排序法原理也是用了分治法,主要原理是將陣列a分為a p.q 1 和a q 1.r 然後調整元素使得a p.q 1 小於等於a q a q 小於等於a q 1.r 然後不斷的遞迴,到最後就排序完成。p i是小於等於x的,i 1 j 1是大於等於x的,j r是還未處理的 i每次從list前面往後走 ...

演算法導論 思考題7 4 快速排序的棧深度

快速排序的棧深度 7.1節中的quicksort演算法包含了兩個對其自身的遞迴呼叫。在呼叫partition後,quicksort分別遞迴呼叫了左邊的子陣列和右邊的子陣列。quicksort中的第二個遞迴呼叫並不是必須的。我們可以用乙個迴圈控制結構來代替它。這一技術稱為尾遞迴,好的編譯器都提供這一功...