快速排序和氣泡排序的原理是差不多的,但是快速排序交換位置是跳越的,所以有些時候它的複雜程度會優於氣泡排序。它的最差時間複雜度為o(n^2),但是它的平均複雜度為o(n*logn)。
首先,我們來對一組數進行排序
6 1 2 7 9 3 4 5 10 8
第一步,創立乙個陣列ar[10],我們需要尋找乙個基準數,我們就規定最左邊乙個數為基準數。
61 2 7 9 3 4 5 10 8
然後從兩邊開始搜尋(如果基準數在左邊,就先從右邊搜尋,反之則搜尋順序反過來),把比基準數小的放在左邊,比基準數大的放在右邊。
i=0 j=9
從j- -開始
j=9 ar[j]=8 —— j=8 ar[j]=10 —— j=7 ar[j]=5比6小
然後開始i++
i=0 ar[i]=6 —— i=1 ar[i]=1 —— i=2 ar[i]=2 —— i=3 ar[i]=7比6大
最後交換此時ar[i]和ar[j]的數,順序就變為
61 2 5 9 3 4 7 10 8
然後從這個位置接著進行搜尋,直到i和j相等。
從j- -開始
j=7 ar[j]=7 —— j=6 ar[j]=4比6小
然後i++
i=3 ar[i]=5 —— i=4 ar[i]=9比6大
最後交換此時ar[i]和ar[j]的數,順序就變為
61 2 5 4 3 9 7 10 8
然後繼續
從j- -開始
j=6 ar[j]=9 —— j=5 ar[j]=3比6小
然後i++
i=4 ar[i]=5 —— i=5 此時i=j
所以交換基準數與ar[i]或者ar[j]交換
最後得到順序為
3 1 2 5 469 7 10 8
這樣6就在第6位上,所以6的位置就排好了。
我們再分別排6的左右兩邊,也就是3 1 2 5 4和9 7 10 8就好了。
這裡我們用遞迴的思想就可以。
#includeusing namespace std;
int ar[101],n; //定義全域性陣列
void quick_sort(int left,int right)
int i,j,temp,tt;
temp=ar[left];//把最左邊的定義為基準數
i=left,j=right;
while(i!=j)
while(ar[i]<=temp &&iif(i} ar[left]=ar[i];//交換基準數的位置
ar[i]=temp;
quick_sort(left,i-1);
quick_sort(i+1,right);
}int main()
quick_sort(1,n);
for(int i=1;i<=n;i++)
return 0;
}
排序 快速排序(C )
1 演算法描述 1.1 設當前參加排序的陣列為array 0.n 1 選擇乙個元素 通常稱該元素為基準元素 作為基準元素 將小於或者等於基準元素的所有元素都移到基準元素的左邊 把大於或者等於基準元素的所有元素都移到分界元素的右邊 執行完 2 3 步驟後,基準元素左邊元素序列,基準元素,基準元素右邊元...
排序 快速排序(C )
如果看不懂這些乾巴巴的理 字,那就先不用看了,下面 中有詳細的注釋,大家可以先跟著 走幾遍,回過頭來再看這些文字描述,總之 紙上得來終覺淺,絕知此事要躬行。排序演算法哪家強,從實際應用的角度上將,快排表現很好。很自然地,人們會覺得短陣列比長陣列更好處理,因此可能會想到將原始陣列分為若干各子部分然後分...
快速排序 c
快速排序應該是目前最快,也是最常用的一種排序演算法。它將乙個集合劃分成兩個子集合,然後繼續遞迴來完成最終排序。具體做法 1.選取集合最右端的元素作為乙個參照物,稱之為 樞紐 pivot 2.開始計算分割位置。在計算時,進行元素交換,確保左側元素都小於樞紐,而右側都大於樞紐。3.根據分割位置,分別遞迴...