演算法導論之快速排序 學習筆記

2022-02-17 17:57:45 字數 1716 閱讀 8535

或者你也可以打個比喻,想象一下,假設r為主元素,j元素為前方開路元素,和主元素進行比較,如果大於主元素則繼續開路 ,如果小於主元素則i元素加1之後和j元素交換之後,j元素繼續開路直到最後。

書中給出了劃分的偽**:

1 partition(a,p,r)

2 x = a[r] //將最後乙個元素作為主元素

3 i = p-1

4 for j=p to r-1 //從第乙個元素開始到倒數第二個元素結束,比較確定主元的位置

5 do if a[j]

<

= x6 i

= i+1

7 exchange a[i] <-

>

a[j]

8 exchange a[i+1]

<

->

a[r] //最終確定主元的位置

9 return i+1 //返回主元的位置

通過遞迴,書中又給出了快速排序的偽**:

1 quicksort(a,p,r)

2 if p

<

r3 q

= partition(a,p,r)

//確定劃分位置

4 quicksort(a,p,q-1) //子陣列a[p...q-1]

5 quicksort(q,q+1,r) //子陣列a[q+1...r]

採用c#語言來段**:

static

void main(string

args)

;quicksort(arrinput,

0, arrinput.length - 1

);

for (int i = 0; i < arrinput.length; i++)

console.read();

}//////

快速排序演算法

/// ///

//////

///static

int partition(int arr, int p, int

q)

}swap(arr, i+1

,q);

return (i + 1

);

#endregion

}

//////

遞迴實現左右兩部分

/// ///

//////

static

void quicksort(int arr, int p, int

r)

}//////

交換資料

/// ///

///static

void swap(int a, int n1,int

n2)

經過分析,快速排序演算法在平均情況下的時間複雜度為t(n)=o(nlogn),如果序列本身已經是排好序了此時快速排序處於最壞的情況。可以通過修改操作partition,採用隨機選擇策略來選擇基準元素 。至於隨機化快速排序大家可以參考其他的資料。

熱愛c++程式設計,自認為通過努力改變人生,喜歡研究新奇技術。

演算法導論學習筆記(七) 快速排序

快速排序是乙個使用分治思想的排序演算法,具有如下優點 1.演算法的期望執行時間為 nlgn 且其中蘊含的常數因子較小,故而快速排序演算法通常是實際應用中最好的選擇。2.原址排序,排序過程中只需要有限個輔助空間。快速排序通過分治的演算法設計思想,借助關鍵子過程partition將輸入 這裡假定演算法的...

演算法導論之快速排序

def partition a,p,r x a r 錨點 主元 i p 1 for j in range p,r if a j x i 1a i a j a j a i a i 1 a r a r a i 1 return i 1 defquicksort a,p,r if p r 分治 q par...

演算法導論之快速排序

1 2 author justinzhang3 email uestczhangchao gmail.com4 time 2011年5月11日15 58 405 discription 演算法導論第7章,快速排序演算法實現6 change the previous c to cpp,and usin...