快速排序的思路是依據乙個中值資料項來吧資料表分成兩半:小於中值的一半和大於中值的一半,然後每部分分別進行快速排序(遞迴)
遞迴三要素:
基本結束條件:資料表僅有1個資料項
縮小規模:根據中值,將資料表分為兩半,最好情況是相等規模的兩半
呼叫自身:將兩半分別呼叫自身進行排序(排序基本操作在**過程中)
繼續移動,直到左標移到右標的右側,停止移動
這時右標所指位置就是中值應處的位置
將中值和這個位置交換
**完成,左半部分比中值小,右半部分比中值大
def
quicksort
(alist)
: quicksorthelper(alist,0,
len(alist)-1
)def
quicksorthelper
(alist, first, last)
:# 基本結束條件
if first < last:
# **
splitpoint = partition(alist, first, last)
# 遞迴呼叫
quicksorthelper(alist, first, splitpoint -1)
# 前半部分
quicksorthelper(alist, splitpoint +
1, last)
# 後半部分
defpartition
(alist, first, last)
: pivotvalue = alist[first]
# 選定中值
# 左右標初值
leftmark = first +
1 rightmark = last
done =
false
while
not done:
# 向右移動左標
while leftmark <= rightmark and alist[leftmark]
<= pivotvalue:
leftmark = leftmark +
1# 向左移動右標
while rightmark >= leftmark and alist[rightmark]
>= pivotvalue:
rightmark = rightmark -
1if rightmark < leftmark:
# 兩標相錯,結束移動
done =
true
else
:# 左右標的值交換
temp = alist[leftmark]
alist[leftmark]
= alist[rightmark]
alist[rightmark]
= temp
# 中值就位
temp = alist[first]
alist[first]
= alist[rightmark]
alist[rightmark]
= temp
return rightmark # 中值點,也是**點
alist =[54
,26,93
,17,77
,31,44
,55,20
]quicksort(alist)
print
(alist)
python實現快速排序
快速排序的思想是任意選取要排序的list中的乙個數pivot,每次遞迴時將list按照 小於pivot的,pivot,大於pivot的 排序,再對小於和大於pivot部分分別快速排序。function quicksort list select a pivot foreach x in list i...
Python實現快速排序
快速排序的思路 numlist 6,8,1,4,3,9,5,4,11,2,2,15,6 1 設 keys 又稱為監視哨 等於 numlist 0 i等於0 j等於len numlist 1,即如下 numlist 6,8,1,4,3,9,5,4,11,2,2,15,6 keys 6 i 0 j2 1...
python實現快速排序
coding utf 8 實現對列表中的數進行快速排序 importrandom 隨機生成乙個有1000整數的列表 number random.randint 1 1000 foriinrange 1000 列印原始列表 printnumber 單個列表快速排序函式 返回一次排序後的列表和所選取基數...