快速排序和隨機快速排序

2021-10-02 19:14:52 字數 1122 閱讀 9891

嚴書上的快排是以最左邊元素為樞紐的,如下:

#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函式裡面利用了兩個標桿左右同時遍歷,方法巧妙

實際上,如果原始序列本身就接近於有序,利用上面的快排效率和變低,因為樞紐沒有把序列劃分為兩個長度接近的子區間,這時可以採用隨機樞紐,只需要再上面的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 隨機快速排序 隨機選擇乙個數和最後乙個替換一下 長期期望...