#-*- coding : utf-8 -*-
'''快速排序:
屬於交換排序,通過元素之間的比較和交換位置來達到排序的目的
分治法:在每一輪挑選乙個基準元素,並讓其他比它大的元素移動到數列一邊,比它小的元素移動到數列的另一邊,從而把數列拆解成兩個部分
平均時間複雜度o(nlogn)
一般選擇數列的第乙個元素為基準元素,也可以隨機選擇乙個元素作為基準元素
''''''
一、雙邊迴圈法
設定右指標和左指標,指向數列的最左和最右兩個元素
第一次迴圈,從右指標開始,讓指標所指向的元素和基準元素做比較。如果大於或等於基準元素,則指標向左移動;如果小於基準元素,則右指標停止移動,切換到左指標;
輪到左指標行動,讓指標所指向的元素和基準元素做比較。如果小於或等於基準元素,則指標向右移動;如果大於基準元素,則左指標停止移動
'''#使用遞迴
defquicksort
(string,startindex,endindex):if
(startindex:#基準元素位置
pivotindex=partition(string,startindex,endindex)
#根據基準元素,分成兩部分進行遞迴排序
quicksort(string,startindex,pivotindex-1)
quicksort(string,pivotindex+
1,endindex)
defpartition
(string,startindex,endindex)
: pivot=string[startindex]
while startindex!=endindex:
while startindex>pivot:
endindex-=
1 string[startindex]
=string[endindex]
while startindex<=pivot:
startindex+=
1 string[endindex]
=string[startindex]
string[startindex]
=pivot
return startindex
string=[4
,7,6
,5,3
,2,8
,1]quicksort(string,0,
len(string)-1
)#print(string)
'''二、單邊迴圈法
設定mark指標,指向小於基準元素的區域邊界
如果遍歷到的元素大於基準元素,就繼續往後遍歷;
如果遍歷到的元素小於基準元素:第一,把mark指標右移一位,因為小於基準元素的區域邊界增大了1;
第二,讓最新遍歷的元素和mark指標所在位置的元素交換位置,因為最新遍歷的元素屬於小於基準元素的區域。
'''def
quicksort1
(string,startindex,endindex):if
(startindex < endindex)
: pivotindex = partition1(string, startindex, endindex)
# 根據基準元素,分成兩部分進行遞迴排序
quicksort1(string, startindex, pivotindex -1)
quicksort1(string, pivotindex +
1, endindex)
defpartition1
(string,startindex,endindex)
: pivot=string[startindex]
mark=startindex
for i in
range
(startindex,endindex+1)
:if(string[i]
: mark +=
1 temp=string[i]
string[i]
=string[mark]
string[mark]
=temp
string[startindex]
=string[mark]
string[mark]
=pivot
return mark
string1=[4
,7,6
,5,3
,2,8
,1]quicksort1(string1,0,
len(string)-1
)#print(string1)
#非遞迴實現
defquicksort2
(string)
: stack =
len(string)-1
)0)while stack:
a = stack.pop(
) b = stack.pop(
) index = partition1(string, a, b)
if a < index -1:
1)if b > index +1:
1)string2=[4
,7,6
,5,3
,2,8
,1]quicksort2(string1)
print
(string1)
資料結構排序之快速排序
本來昨天晚上就可以把快速排序發上去,沒想到昨晚csdn竟然維護,那麼就只能在停電的情況下下用學校的卡的要死的網發這快速排序了,不停多好,停電了還得自己掏腰包買個充電檯燈,裝的好像像學霸一樣,實際就是乙個大學渣,我也就不jjyy,直接說快速排序的思想,我是這樣理解的,用乙個變數作為基準,在拿出i和j兩...
資料結構之快速排序
3.編寫乙個快速排序的演算法,並且在main函式中驗證其功能已實現 快速排序 quick sort 又稱劃分交換排序,基本思想 在待排序的n 個記錄中記錄中任取乙個作為 基準 將其餘記錄分為兩組,第一組中 各記錄的鍵值均小於或等於基準的鍵值,第二組中各記錄的鍵值均大於 或等於基準的鍵值,而基準就排在...
資料結構之快速排序
旁白 演算法小白白一枚,突然要掌握演算法。花廢了2個小時把一些基本的知識掌握。包括偽 書寫規則 演算法設計技術和時間複雜性的計算弄清楚。本打算用本子做筆記,一想發現沒筆 沒本子,這對本在疫情被困在家的我來說是一筆 鉅額 所以想到寫部落格,一方面剛接觸感覺有點意思,另一方面當做筆記隨時可以複習看看 廢...