C 實現快速排序

2021-10-05 17:01:04 字數 1267 閱讀 1473

這裡對陣列;進行排序。

先利用fous來存陣列第乙個元素或者最後乙個元素當做即將成為的"中間"元素。

利用i來找從左邊到右邊乙個比fous大的元素。

利用j來找從右邊到左邊乙個比fous小的元素。

比如第一趟:

fous=2,此時先找j的元素,j一開始記錄陣列最後乙個元素也就是0。

0小於2,所以a[11]的值賦予a[0]。(此時i=0,j=11)

此時陣列為。

在找i從左往右的乙個比fous大的元素,此時找到了4,將 a[1]的值賦予a[11]。(此時i=1,j=11)

此時陣列為。

在如第二趟:

fous=2,此時j記錄的是11,j向前找,找到了1,對應的j的記錄為5。

將j記錄的值賦予與此時i記錄的值a[1]。

得到。在次將i向後移。找到了6(比fous=2大),將6賦予此時j記錄的下標的值。

得到。以此類推知道i==j時

將fous的值放入

得到。則可以理解為,先從右到左找到乙個比fous小的元素記錄下來,

在從左往右找到乙個比fous大的元素記錄下來。

在交換這兩個值。

————————————————————————————

另外一種思想,即每次都把小的換到fous的前面。

把大的換到fous的後面。

即i,j,fous與前面記錄的變數類似;

每次從右往左找到乙個比fous小或等於的數;

每次從左向右找到乙個比fous大或等於的數;

交換a[i],a[j]。當i==j時停止。

其過程如下:

1:2:

3:4:

其**如下:

#includeusing namespace std;

//快速排序

void quicksort(int *a,int left,int right)

while(a[i]swap(a[i],a[j]);

} a[j]=fous; //當i==j後 ,把fous的值賦予a[i]或a[j],此時fous處於「中間」位置。

quicksort(a,left,j-1); // 將陣列前面部分繼續遞迴

quicksort(a,j+1,right); // 將陣列後半段繼續遞迴 }}

int main()

; quicksort(a,0,11);

for(int i=0;i<12;i++)

cout

}

排序 快速排序,C 實現

本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...

快速排序 c 實現

快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...

快速排序(C 實現)

include using namespace std void swap int a,int b int sort int begin,int end if beginwhile beginif begin return begin void quicksort int begin,int end...