嚴書上的快排是以最左邊元素為樞紐的,如下:
注意在partition函式裡面利用了兩個標桿左右同時遍歷,方法巧妙#include
#include
using namespace std;
intpartition
(int a,
int left,
int right)
a[left]
=p;return left;
}void
quicksort
(int a,
int left,
int right)
}int
main()
;quicksort
(a,0,5
);for(
int i=
0;i<
6;i++
) cout<<<
" ";
cout
}
實際上,如果原始序列本身就接近於有序,利用上面的快排效率和變低,因為樞紐沒有把序列劃分為兩個長度接近的子區間,這時可以採用隨機樞紐,只需要再上面的partition函式前面生成乙個區間範圍內的隨機數即可,這要用到srand(),和rand()和time()幾個函式,注意標頭檔案的新增,得隨機快速排序如下。
#include
#include
#include
using namespace std;
intpartition
(int a,
int left,
int right)
a[left]
=p;return left;
}void
quicksort
(int a,
int left,
int right)
}int
main()
;quicksort
(a,0,5
);for(
int i=
0;i<
6;i++
) cout<<<
" ";
cout
}
快速排序與隨機快速排序
實現對陣列的普通快速排序與隨機快速排序。1 實現上述兩個演算法 2 統計演算法的執行時間 3 分析效能差異,作出總結 一 快速排序 通過使用分治思想對快速排序演算法進行描述。下面對乙個典型的子陣列a p r 進行快速排序的三步分治過程 分解 陣列a p r 被劃分為兩個 可能為空 子陣列a p q ...
Python 實現快速排序和隨機快速排序
直接上 快速排序 coding utf 8 defquicksort a,left,right if leftmid partition a,left,right quicksort a,left,mid 1 quicksort a,mid 1,right defpartition a,left,r...
隨機快速排序
問題畫出來小於區域和等於區域,劃偏 1,2,3,4,5,6,7 7 7 總拿最後乙個劃分,跟資料狀況有關,比較差的蛻變程o n 2 6,5,4,3,2,1 1,1 資料分布比較差 比價好的情況 x t n 2t n 2 o n n nlogn 隨機快速排序 隨機選擇乙個數和最後乙個替換一下 長期期望...