隨機快速排序

2021-09-24 20:51:29 字數 1051 閱讀 4192

問題畫出來小於區域和等於區域,劃偏

[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)

隨機快速排序(隨機選擇乙個數和最後乙個替換一下),長期期望複雜度o(nlogn)

隨機快速排序  時間複雜度(nlogn)  空間複雜度o(logn)  列表分為多少次,斷點多少次,二叉樹的高度

隨機快速排序初始並不是一定要按照最優乙個位置元素作為num,而是隨機選取乙個數

def partition(l,l,r):

"""l[r] 最後乙個數

r 最後乙個位置索引

"""less = l - 1

more = r

while l < more:

if l[l] < l[r]:

less +=1

swap(l,less,l)

l +=1

elif l[l] > l[r]:

more -=1

swap(l,more,l)

else:

l+=1

swap(l,more,r)

return [less+1,more]

def swap(l,i,j):

tmp = l[i]

l[i] = l[j]

l[j] = tmp

def quicksort(l,l,r):

import random

if l < r:

swap(l,l+int(random.random()*(r-l+1)),r)

p = partition(l,l,r)

quicksort(l,l,p[0]-1)

quicksort(l,p[1]+1,r)

l = [1,3,6,8,5,9,0]

quicksort(l,0,len(l)-1)

快速排序和隨機快速排序

嚴書上的快排是以最左邊元素為樞紐的,如下 include include using namespace std intpartition int a,int left,int right a left p return left void quicksort int a,int left,int ...

快速排序與隨機快速排序

實現對陣列的普通快速排序與隨機快速排序。1 實現上述兩個演算法 2 統計演算法的執行時間 3 分析效能差異,作出總結 一 快速排序 通過使用分治思想對快速排序演算法進行描述。下面對乙個典型的子陣列a p r 進行快速排序的三步分治過程 分解 陣列a p r 被劃分為兩個 可能為空 子陣列a p q ...

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

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