快速排序C

2021-04-23 18:08:57 字數 990 閱讀 5253

1.

快速排序:

#include

void run(int* pdata,int left,int right)

}while(i<=j);//

如果兩邊掃瞄的下標交錯,就停止(完成一次) //

當左邊部分有值

(lefti)

,遞迴右半邊

if(right>i)

run(pdata,i,right); }

void quicksort(int* pdata,int count)

void main() ;

quicksort(data,7);

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

cout

這裡我沒有給出行為的分析,因為這個很簡單,我們直接來分析演算法:首先我們考慮最理想的情況 1.

陣列的大小是

2 的冪,這樣分下去始終可以被

2 整除。假設為

2 的k 次方,即

k=log2(n) 。

2. 每次我們選擇的值剛好是中間值,這樣,陣列才可以被等分。

第一層遞迴,迴圈

n 次,第二層迴圈

2*(n/2)......

所以共有

n+2(n/2)+4(n/4)+...+n*(n/n) = n+n+n+...+n=k*n=log2(n)*n

所以演算法複雜度為

o(log2(n)*n)

其他的情況只會比這種情況差,最差的情況是每次選擇到的

middle

都是最小值或最大值,那麼他將變

成交換法(由於使用了遞迴,情況更糟)。但是你認為這種情況發生的機率有多大??呵呵,你完全

不必擔心這個問題。實踐證明,大多數的情況,快速排序總是最好的。

如果你擔心這個問題,你可以使用堆排序,這是一種穩定的

o(log2(n)*n)

演算法,但是通常情況下速度要慢

於快速排序(因為要重組堆)。

排序 快速排序(C )

1 演算法描述 1.1 設當前參加排序的陣列為array 0.n 1 選擇乙個元素 通常稱該元素為基準元素 作為基準元素 將小於或者等於基準元素的所有元素都移到基準元素的左邊 把大於或者等於基準元素的所有元素都移到分界元素的右邊 執行完 2 3 步驟後,基準元素左邊元素序列,基準元素,基準元素右邊元...

排序 快速排序(C )

如果看不懂這些乾巴巴的理 字,那就先不用看了,下面 中有詳細的注釋,大家可以先跟著 走幾遍,回過頭來再看這些文字描述,總之 紙上得來終覺淺,絕知此事要躬行。排序演算法哪家強,從實際應用的角度上將,快排表現很好。很自然地,人們會覺得短陣列比長陣列更好處理,因此可能會想到將原始陣列分為若干各子部分然後分...

快速排序 c

快速排序應該是目前最快,也是最常用的一種排序演算法。它將乙個集合劃分成兩個子集合,然後繼續遞迴來完成最終排序。具體做法 1.選取集合最右端的元素作為乙個參照物,稱之為 樞紐 pivot 2.開始計算分割位置。在計算時,進行元素交換,確保左側元素都小於樞紐,而右側都大於樞紐。3.根據分割位置,分別遞迴...