04 快速排序演算法的通俗講解 Python

2021-09-23 17:00:14 字數 2040 閱讀 1718

快速排序實現的方法有兩種,挖坑法和前後指標法

挖坑法選乙個基準數,通常是第乙個,將其他數與這個基準數比較,定義游標left,right

首先從右邊開始,即right開始向左移動,如果right指向的數小於基準數,就相互調換(否則繼續向左移動),調換後,right游標停止,讓left游標移動,是向右移動。如果left指向的數比基準數大,就與基準數調換,剛才基準數就是right指向的數。迴圈上述操作即可

**如下

'''

挖坑法'''

def quiet_sort(alist, start, end):

if start >= end:

return

mid_value = alist[start]

left = start

right = end

while left < right:

while alist[right] >= mid_value and left < right:

right -= 1

alist[left], alist[right] = alist[right], alist[left]

while alist[left] < mid_value and left < right:

left += 1

alist[left], alist[right] = alist[right], alist[left]

quiet_sort(alist,start,left-1)

quiet_sort(alist,left+1,end)

def main():

# li = [9, 8, 7, 6, 5, 4, 3, 2, 1]

li = [56,78,4,3,42,90]

# li = [54,78,36,36,79,68,0,2,9,1]

quiet_sort(li, 0, len(li)-1)

print(li)

if __name__ == "__main__":

main()

前後指標法

同樣需要選擇乙個基準數

原理就是前後夾擊,大的數放右邊,小的數放左邊,尋找乙個位置給基準數,是的基準數坐邊是小的,右邊是大的

# coding:utf-8

'''以下**對逆序排列的序列無用

'''def quiet_sort(alist, start, end):

if start >= end:

return

#定義乙個基準值

mid_value = alist[start]

#定義左游標

left = start

#定義右游標

right = end

while left < right:

#當右邊邊的值大於基準值時,right游標左移

while alist[right] >= mid_value and left < right:

right -= 1

alist[left] = alist[right]

#當左邊的值小於基準值時,left游標右移

while alist[left] < mid_value and left < right:

left += 1

alist[right] = alist[left]

alist[left] = mid_value

quiet_sort(alist,start,left-1)

quiet_sort(alist,left+1,end)

def main():

# li = [9, 8, 7, 6, 5, 4, 3, 2, 1]

# li = [1, 2, 3, 4, 5, 6, 7, 8, 9]

li = [54,78,36,36,79,68,0,2,9]

quiet_sort(li, 0, len(li)-1)

print(li)

if __name__ == "__main__":

main()

超級通俗易懂的演算法實現講解 (一) 歸併排序

對於歸併排序,我們收到的任務很明確 就是對一組無序 當然也有可能有序啦 的不明是否有序的資料進行排序,使這組序列實現從小到大的排列順序,這裡給出一組樣例輸入 8 5 9 2 6 3 7 1 10 4 我們不妨將序列先放入陣列中 define max 500 int n int s max cin n...

通俗演算法教程04 演算法相關的基礎概念

本系列前面兩篇講的都是一些背景知識,從這一篇開始我們正式講演算法,從演算法的一些基本概念講起。確切地說,演算法是有限步驟的計算過程,該過程取某個值或集合作為輸入,並產生某個值或集合作為輸出。如果演算法對於每個輸入都可以正確的停機,則稱該演算法是正確的,並稱正確的演算法解決了給定的計算問題。乙個不正確...

逐步講解快速排序演算法及C 版的實現示例

演算法思想 快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它...