快速排序C

2021-08-14 01:38:08 字數 1111 閱讀 5004

快速排序利用了分治的思想,分而治之。通過一趟排序將序列分為兩部分,其中一部分比較關鍵字小,一部分比關鍵字大。之後繼續對這兩個子串行重複此過程,直到整個序列都有序。

選基準值:在要排序的序列中選乙個幾個基準值,作為劃分區間的 關鍵字。

分割序列:按照基準值把序列分為兩部分,左邊的小於基準值,右邊的大於基準值。

重複分割:對子序列重複上面的步驟,直到序列為空或者只有乙個元素。當遞迴處理的所有子串行都返回時,序列有序。

// 版本一 填充法  初始的時候預設最後乙個數字是基準值 最後乙個數挖坑

//從左向右開始進行,當當前值小於基準值並且i//接下來開始從右向左進行,當當前值大於基準值並且i//迴圈的結束條件是 i>=j ,執行條件是iint partition1(vector

&v, int left, int right)

while (v[i]>flag&&iif (i < j)

}v[j] = flag;

return j;

}}void quicksort1(vector

& v, int left, int right)

}

//交換版本  交換法   初始的時候預設最後乙個數字是基準值 

//從左向右開始進行,當當前值小於 等於 基準值並且i//接下來開始從右向左進行,當當前值大於 等於 基準值並且i//將上邊找到的兩個數字交換

//迴圈的結束條件是 i>=j ,執行條件是i//最後進行判斷 當前的結束值 是否是最後乙個數字(即儲存的基準值) 如果不是二者進行交換。

int partition2(vector

&v, int left, int right)

if (j != right - 1)

return j;

}}void quicksort2(vector

& v, int left, int right)

}

//非遞迴版本 使用棧結構來儲存每次的開始和結束位置

void quicksort4(vector

&v, int left, int right)

}}

排序 快速排序(C )

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

排序 快速排序(C )

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

快速排序 c

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