本章使用了「使用python語言實現快速排序演算法」中的函式,具體請參考:
使用python語言實現快速排序演算法
'''
randomized_quicksort(a,p,r)
if p
import random
from quick_sort import
*def
randomized_quicksort
(a,p,r)
:'''
randomized_quicksort用遞迴法實現對陣列進行排序(正序)
a是乙個僅包含數值型的列表
p,r是列表a的下標,且滿足p<=r'''
if pq=randomized_partition(a,p,r)
randomized_quicksort(a,p,q-1)
randomized_quicksort(a,q+
1,r)
defrandomized_partition
(a,p,r)
:'''
randomized_quicksort為快速排序的關鍵函式,用來對陣列進行原址重拍
randomized_quicksort隨機選擇陣列元素作為主元x,並圍繞x把陣列劃分成4個(可能為空)區域
for迴圈體內的下標k在每個區域滿足以下性質:
1,若p<=k<=i,則a[k]<=x
2,若i+1<=k<=j-1,則a[k]>x
3,若k=r,則a[k]>x
'''i=random.randint(p,r)
a[i]
,a[r]
=a[r]
,a[i]
return partition(a,p,r)
a =[9
,8,7
,5,5
,6,13
,2,3
,12]print
(a)randomized_quicksort(a,0,
len(a)-1
)print
(a)[9,
8,7,
5,5,
6,13,
2,3,
12][2
,3,5
,5,6
,7,8
,9,12
,13]
隨機快速排序
問題畫出來小於區域和等於區域,劃偏 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 隨機快速排序 隨機選擇乙個數和最後乙個替換一下 長期期望...
快速排序之隨機化
快速排序的思想就是選擇乙個基準數,讓每個數與它比較,找到它在所有這些數排好序後應該在的位置。而快速排序對大體應經排好序的數執行效率是n 2,所以對基準數隨機化,以下 include include using namespace std 產生m到n的隨機數 int random int m,int ...
快速排序和隨機快速排序
嚴書上的快排是以最左邊元素為樞紐的,如下 include include using namespace std intpartition int a,int left,int right a left p return left void quicksort int a,int left,int ...