思路:
一趟排序:在給定的序列中選定乙個基準數,將序列中值比基準數小的元素都移動到其左側,值比基準數大的都移動到其右側;然後返回基準數的下標。
快速排序:對序列進行一趟排序,然後按照返回值將序列分為左右兩個子串行(遞迴)。
兩個子串行會重複上述過程,然後分為更小的序列,以此類推,直到序列不可再分。
具體實現看以下**,注釋很詳細。
**:
//一趟排序:將序列分為兩部分
intmypartition
(vector<
int>
&v,int beg,
int end)
swap
(v[left]
,v[right]);
//不符合條件則將其交換到左邊去
//交換後,right所指的位置是基準數
//從左往右掃瞄,原理同上
while
(left<=p)
swap
(v[left]
,v[right]);
//交換後,left所指的位置是基準數
}return left;
//返回基準數的下標
}//快速排序
void
quicksort
(vector<
int>
&v,int beg,
int end)
}
排序 快速排序(C )
1 演算法描述 1.1 設當前參加排序的陣列為array 0.n 1 選擇乙個元素 通常稱該元素為基準元素 作為基準元素 將小於或者等於基準元素的所有元素都移到基準元素的左邊 把大於或者等於基準元素的所有元素都移到分界元素的右邊 執行完 2 3 步驟後,基準元素左邊元素序列,基準元素,基準元素右邊元...
排序 快速排序(C )
如果看不懂這些乾巴巴的理 字,那就先不用看了,下面 中有詳細的注釋,大家可以先跟著 走幾遍,回過頭來再看這些文字描述,總之 紙上得來終覺淺,絕知此事要躬行。排序演算法哪家強,從實際應用的角度上將,快排表現很好。很自然地,人們會覺得短陣列比長陣列更好處理,因此可能會想到將原始陣列分為若干各子部分然後分...
快速排序 c
快速排序應該是目前最快,也是最常用的一種排序演算法。它將乙個集合劃分成兩個子集合,然後繼續遞迴來完成最終排序。具體做法 1.選取集合最右端的元素作為乙個參照物,稱之為 樞紐 pivot 2.開始計算分割位置。在計算時,進行元素交換,確保左側元素都小於樞紐,而右側都大於樞紐。3.根據分割位置,分別遞迴...