Python Tutorial 19 | Quick Sort(快速排序法)

阿嬤
Sep 25, 2021

--

前言

只要你懂排序法的原理,排序法程式就會幫助你。

原理

其實這東西就是把大問題分成小問題,先隨機選一個數字,與所有數字進行配對,比他小的在左邊,比他大的在右邊,數字串列再分成兩個數字串列,兩個數字串列在進行排序又或者在分成兩個數字串列排序,最後就可以像影片中的結果一樣。

程式

import randomdef quick_sort(nlst):
'''快速排序法'''
if len(nlst) <= 1:
return nlst
left = []
right = []
piv = []
pivot = random.choice(nlst)
for val in nlst:
if val == pivot:
piv.append(val)
elif val < pivot:
left.append(val)
else:
right.append(val)
return quick_sort(left) + piv + quick_sort(right)
data = [6, 1, 5, 7, 3, 9, 4, 2, 8]
print("原始串列:", data)
print("排序串列:", quick_sort(data))

請記住以下重點

right:基準點右側

left:基準點左側

piv(pivot):基準點

val:數值(變數)

取基準點

因為在原理有講過,會隨機取一個基準點,小的在他左邊,大的在他右邊,而這個基準就是隨機的(此處為11行)

比對

首先我們我們必須再次搞懂一些東西,基準值不等於數值,直接拿圖來:

我們就以撲克牌來講,一樣都是隨機的數字,隨機的排列,黑桃三的基準值(piv),紅色的為數值(val)。這樣大概能懂吧,不管說他們怎麼排列還是什麼的,基準值都是不變的。

接下來原理懂了,就沒事了,當然我們要先處理的就是基準值(val),比基準值小的在左邊(第15、16行),比基準值大的在右邊(第17、18行),最後再把已經排好的左數列、基準值、右數列合併起來就成功了。

統整

最後把要排的數列排出來,當然還有原始串列還有排序串列,這邊就不多說了。(想知道的可以回去看插入排序法的文章)

總結

好簡單,但好難。

--

--

阿嬤
阿嬤

Written by 阿嬤

歡迎來到湯阿嬤的帝國,如果對體制外的學生的學習精華就來這裡吧,想了解一個體制外學生的日常嗎?想了解繪畫相關的知識嗎?而且,如果有對繪畫有任何的挫折或者阻礙這裡最適合你們!或許你會覺得這裡只是一個憨批在這裡發一些沒有意義的文,但其實,我才是國中生喔!!所以有對這裡有興趣的話,就來這裡吧!

No responses yet