快速隨機排序的思路是從乙個陣列中隨機選擇乙個主元,然後將這個主元放到陣列的最後.迴圈陣列時,先定義乙個指標,發現了比主元小的元素,如果指標和迴圈下標相同
則只是把指標自增,如果發現迴圈下標不同則將迴圈下標與指標位置交換,這樣做的目的是始終保證指標左邊的元素小於主元,最後迴圈結束將主元與指標位置交換.這樣
就將陣列分成了left pivot right.然後再遞迴left,right.
private以下提供乙個測試方法.static
void quickinternal(int a, int l, int
r)
//查詢分割槽點
int q =partition(a, l, r);
quickinternal(a, l, q - 1);
quickinternal(a, q + 1, r);
}//排序
private
static
int partition(int a, int l, int
r)
intrandom;
if (l == 0)
else
if (random !=r)
int pivot =a[r];
int m =l;
for (int j = l; j < r; j++)
else}}
int temp =a[m];
a[m] =a[r];
a[r] =temp;
return
m; }
資料結構與演算法之快速排序
1.快速排序的 實現如下 include using namespace std template void sort t data,size t head,size t tail templatesize t partition t data,size t head,size t tail tem...
資料結構與演算法之快速排序
快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 ...
資料結構與演算法之演算法
1.乙個問題的解可以分解為幾個子問題的解 2.這個問題與分解之後的子問題,除了資料規模不同,求解思路完全一樣 3.存在遞迴終止條件 假如這裡有 n 個台階,每次你可以跨 1 個台階或者 2 個台階,請問走這 n 個台階有多少種 走法?如果有 7 個台階,你可以 2,2,2,1 這樣子上去,也可以 1...