快速排序 QuickSort

2021-07-04 20:19:06 字數 852 閱讀 6923

快速排序主要應用了分治的思想。

分治演算法也叫分治策略,把輸入分為若干個部分,遞迴的解每乙個問題,最後將這些子問題合併成為乙個全域性解

分治模型在每一層遞迴上都有三個步驟:

-分解(divide):將原問題分解成一系列子問題。

-解決(conquer):遞迴的解各個子問題。若子問題足夠小,則直接求解。

-合併(combine):將子問題的結果合併成原問題的解。

//分治的解決部分:partition函式

int partition(vector

&vec,int low,int high)

vec[low]=vec[high];

while(lowreturn low;

}

//分治的分解和合併:quicksort遞迴呼叫

void quicksort(vector

&vec,int low,int high)

}

//partition函式不變

……//quicksort變成非遞迴

方法一、用棧模擬遞迴

void quicksort(vector

&vec,int low,int high)

if(middle+1

< h)

}}

方法

二、用陣列模擬棧,從而實現遞迴

void quicksort(int *a, int l, int h)

if(mid+1

< high)}}

delete s;

}

快速排序 QuickSort

快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...

快速排序 quicksort

快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...

快速排序 QuickSort

1,void quicksort int a,int low,int high 這個函式是排序的遞迴部分,mid就是已經確定的基準元素的位置。2,int partition int a,int low,int high 這個函式幹了兩件事 1 挑出來乙個基準元素 這裡選的是最後乙個作為基準 找它的正...