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...