這裡對陣列;進行排序。
先利用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...