隨機的快速排序演算法

2021-05-25 18:00:38 字數 1210 閱讀 5303

僅僅在原來的快速排序基礎上增加了取隨機數為劃分點,改進了原有快排使用第乙個元素作為劃分元素的缺點,即減少了遇到最壞情況的可能。

#include

#include

using

namespace std;

#define n 20    //  最大陣列個數

#define multiplier 0x015a4e35l

#define increment 1

static

unsigned

long seed;

/*      生成隨機數種子 */

void random_seed

(unsigned

long d

)else }

/*      生成乙個low~high範圍內的隨機數 */

unsigned

int random

(unsigned

long low,

unsigned

long high

) /*

* 按樞點元素劃分序列

* 輸入:陣列a,序列的起始位置low,終止位置high

* 輸出:按樞點元素劃分的序列a,樞點元素位置i */

template

int split

(type a

[], int low,

int high

) }}

swap

(a[low

], a[i]

);

return i;

} /*

* 初始化隨機數並執行快排

* 輸入:陣列a,序列的起始位置low,終止位置high

* 輸出:排序好的序列a */

template

void quicksort_random

(type a

[], int low,

int high

) /*

* 隨機選擇樞點的快速排序

* 輸入:陣列a,序列的起始位置low,終止位置high

* 輸出:排序好的序列a */

template

void r_quicksort

(type a

[], int low,

int high

) }int main

()

演算法設計 快速排序 隨機快速排序演算法

1.演算法流程 快速排序的時間複雜性分析 1.最壞情況劃分 當劃分產生的兩個子問題分別包含了n 1個元素和0個元素時,快速排序是最壞情況,假如每次遞迴呼叫,總是出現最不平衡劃分,這是最不平衡劃分。劃分操作時間複雜度為 n 則演算法執行時間的遞迴表示式為t n t n 1 t 0 n 利用代入法可以求...

經典快速排序演算法與隨機快速排序演算法

快速排序用到了分治思想,同樣的還有歸併排序。乍看起來快速排序和歸併排序非常相似,都是將問題變小,先排序子串,最後合併。不同的是快速排序在劃分子問題的時候經過多一步處理,將劃分的兩組資料劃分為一大一小,這樣在最後合併的時候就不必像歸併排序那樣再進行比較。但也正因為如此,劃分的不定性使得快速排序的時間複...

快速排序的改進 隨機快速排序

快速排序是一種高效的排序方法,但是如果我們的輸入陣列是排好序的乙個陣列,快速排序的執行時間就會變成o n 2 雖然這種情況很少會出現,但我們還是應該避免。演算法導論書籍中的修改方法 在排序方法中隨機化選取主元。根據計算,改進後的方法時間複雜度的期望為o nlgn 下面是改進後的 快速排序 publi...