C 快速排序

2021-10-10 01:09:57 字數 1436 閱讀 3186

//快速排序

void

partition

(vector<

int>

&data,

int left,

int right)

swap

(data[left]

, data[end]);

//進行下一次遞迴

int mid = end;

partition

(data, left, mid)

;partition

(data, mid +

1, right)

;}

至於為什麼從右端先開始:在while結束時,會讓target和左右指標相遇的數進行交換,因為從右向左遍歷時,會在第乙個小於target的數停下來,此時保證交換後的兩數為公升序。

此方法適用於陣列中存在大量重複的元素,為了防止重複元素進入下一層遞迴,影響效率

void

quicksortbythree

(vector<

int>

& nums,

int left,

int right)

//定義比較點

int flag = nums[left]

;//交換起始下標

int index = left;

int low = left +1;

int high = right;

while

(low <= high)

else

if(nums[low]

> flag)

else

}quicksortbythree

(nums, left, index-1)

;quicksortbythree

(nums, high+

1, right)

;}

void

quicksort

(vector<

int>

& nums,

int low,

int high)

}

void

partition

(vector<

int>

&data,

int left,

int right)

swap

(data[left]

, data[end]);

//進行下一次遞迴

int mid = end;

partition

(data, left, mid)

;partition

(data, mid +

1, right)

;}

排序 快速排序(C )

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

排序 快速排序(C )

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

快速排序 c

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