快速排序演算法實現(隨機生成pivot)

2021-09-27 13:57:26 字數 1361 閱讀 2773

public

class

quicksort

; quicksort.

quicksort

(data,

0, data.length -1)

; system.out.

println

(arrays.

tostring

(data));

}public

void

quicksort

(int

data,

int start,

int end)

throws exception

int index =

partition

(data, start, end);if

(index > start)

if(index < end)

}private

intpartition

(int

data,

int start,

int end)

throws exception

int partitionindex =

randominrange

(start, end)

;int pivot = data[partitionindex]

;// 將pivot和最後的元素交換,這樣比較的時候不會和pivot相比較,同時也讓最後乙個元素參與了比較

swap

(data, partitionindex, end)

;int small = start -1;

for(

int index = start; index < end; index++)}

} small++

;// 將pivot移動到合適的位置

swap

(data, small, end)

;return small;

// 返回當前的劃分點的位置

}private

void

swap

(int

data,

int index1,

int index2)

/*隨機生成劃分的中心點*/

private

intrandominrange

(int start,

int end)

}

快速排序的時間複雜度:

最好:o(nlogn)

最壞:o(n^2)

平均:o(nlong)

空間複雜度:

最優o(logn)

最差o(n)

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

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

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

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

隨機的快速排序演算法

僅僅在原來的快速排序基礎上增加了取隨機數為劃分點,改進了原有快排使用第乙個元素作為劃分元素的缺點,即減少了遇到最壞情況的可能。include include using namespace std define n 20 最大陣列個數 define multiplier 0x015a4e35l de...