快速排序:
快速排序的基本演算法思想是;
設待排序的元素序列個數為
n,存放在陣列
a中,令第乙個元素為樞軸元素,即將
a[0]
作為參考元素,令
pivot=a[0].
初始時,令
i=0;j=a.legth-1;
然後按以下方法操作
:(1).從序列的
j位置往前,依次將陣列的中的元素與樞軸元素相比較,如果當前元素大於等於樞軸元素,則將前乙個元素與樞軸元素相比較,否則將當前元素移動到位置
i,即比較
a[j]
與pivot,
如果a[j]>=pivot,
則連續執行
j--操作,直到找到乙個元素,使
a[j]則將
a[j]
移動到a[i]
中,並執行一次
i++;
(2).從序列的
i位置開始,一次將元素值與樞軸元素相比較。如果當前元素小於樞軸元素,則將後乙個元素與樞軸元素相比較,否則,將當前元素移動的位置
j,即比較
a[i]
與pivot,
如果a[i]則連續執行
i++,
直到遇到乙個元素使
a[i]>=pivot,
將a[i]
移動到a[j]
中,並執行一次
j--;
(3).迴圈執行步驟
1,2,直到出現
i>=j,
將元素pivot
移動到a[j]
中,此時整個元素序列被位置
j劃分為兩個部分,前一部分元素的值都小於樞軸,後一部分元素的值都大於樞軸。即完成看一次快速排序。
實現**:(c#實現)
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace kuaisupaixu
;//待排序陣列
快速排序是一種不穩定的排序演算法,時間複雜度為o(nlog2n)(n倍的log2底n)。
10 3交換排序(2)快速排序
快速排序也是乙個典型的分治思想 divide and conquer 的運用。對於分治法需要了解如下的乙個流程 1.將當前的大問題分解成若干個子問題 2.解決每乙個子問題 3.合併子問題的解 對於運用到陣列的排序來說,很顯然可以將陣列一分為二,分別將其左右排序完成後,再對整個陣列進行排序。上面描述的...
交換排序 快速排序
快速排序 quick sort 也是一種交換排序,它在排序中採取了分治策略。從待排序列中選取一元素作為軸值 也叫主元 將序列中的剩餘元素以該軸值為基準,分為左右兩部分。左部分元素不大於軸值,右部分元素不小於軸值。軸值最終位於兩部分的分割處。對左右兩部分重複進行這樣的分割,直至無可分割。從快速排序的演...
交換排序 快速排序
簡述 快速排序可以說算是針對氣泡排序的一種優化,氣泡排序是順序交換,這樣交換次數順序增長。如果我們做跳躍的交換,那麼可以使得交換次數也是跳躍性,會有所降低 演算法思想 找出乙個樞軸,用於做比較交換,並記下後用。一般用第乙個 用第 一 中間 最後三個取中後來效果會更好 定乙個高位 high和底位 lo...