'''
quick_sort(a,p,r)
if p
def
quick_sort
(a,p,r)
:'''
quick_sort用遞迴法實現對陣列進行排序(正序)
a是乙個僅包含數值型的列表
p,r是列表a的下標,且滿足p<=r'''
if pq=partition(a,p,r)
quick_sort(a,p,q-1)
quick_sort(a,q+
1,r)
defpartition
(a,p,r)
:'''
partition為快速排序的關鍵函式,用來對陣列進行原址重拍
partition選擇陣列最後乙個元素作為主元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
'''x=a[r]
i=p-
1for j in
range
(p,r)
:if a[j]
<=x:
i=i+
1 a[i]
,a[j]
=a[j]
,a[i]
a[i+1]
,a[r]
=a[r]
,a[i+1]
return i+
1
a =[9
,8,7
,5,5
,6,13
,2,3
,12]print
(a)quick_sort(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]
Python排序演算法之快速排序
從列表中抽取乙個元素p 假定為第乙個 使p歸位,保證左邊的元素都比p小,右邊的元素都比p大。再遞迴呼叫完成排序 最壞情況 o n 2n 2 n2 平均情況 o nlogn 最好情況 o nlogn 最壞情況 o n 平均情況 o logn 不穩定 較複雜 一開始,從列表中隨機抽取乙個數與第乙個元素互...
Python排序演算法之快速排序
快排的思想 首先任意選取乙個資料 通常選用陣列的第乙個數 作為關鍵資料,然後將所有比它小的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key...
自學筆記之快速排序
快速排序作為應用非常廣泛的演算法,主要有以下兩個優點。1.所需的平均時間複雜度為o nlgn 最差時間複雜度為o n2 其中的係數常數小。2.為原地排序,所需的空間複雜度小。與歸併排序類似,使用了分治法來排序陣列。divide 將陣列a p r 分成兩個子陣列a p.q 1 和子陣列a q 1.r ...