快速排序演算法(Python實現)

2021-09-29 09:31:11 字數 1460 閱讀 4949

在網上看了很多關於快速排序的思路和**實現,自己總結了一下

步驟:一、從一組序列中選擇乙個基準數,把比這個數大的放在一邊,比這個數小的放到另一邊(**中比基準數大的放到右邊,比基準數小的放到左邊)

二、基於基準數進行分割槽,對左右兩邊進行步驟1的操作,直至各區只有乙個數

步驟一詳細思路:

假設有一組序列alist,第乙個元素的索引設定為low,最後乙個元素索引設定為hight。

1、設定left=low,right=hight,基準值pivot=alist[low] (這個地方把第乙個元素設定為基準值,實際中可以隨機選取序列中數等方法提高演算法的可執行性),基準數形成第乙個坑alist[left]

2、right–,由後往前找小於基準數的值alist[low],找到後進行賦值alist[left] = alist[right],left++。

3、left 由後往前找,找大於基準值alist[low]的值,找到後進行賦值alist[left] = alist[right]。

4、重複執行步驟2、3,直至left = right ,此時已經把序列中小於基準值的數放到了基準值左邊,大於基準值的數放到基準數右邊。

#encoding=utf-

8def sorts

(alist,low,hight)

:if low>=hight:#判斷為true遞迴結束

return

left = low

right = hight

pivot = alist[left]#基準值設為第乙個元素,可優化基準值改善演算法

while left < right:

#尋找小於基準值的數填到基準值處

while left < right and pivot < alist[right]

: right -=

1if left alist[left]

= alist[right]

left +=

1 #尋找大於基準值的數填到上乙個坑中

while left left +=

1if left alist[right]

= alist[left]

right -=

1 #迴圈結束,left=right

alist[left]

=pivot

#開始遞迴

sorts

(alist,low,left-1)

sorts

(alist,left+

1,hight)

alis =[2

,54,67

,87,45

,89,32

,43,76

]print

(alis)

sorts

(alis,0,

len(alis)-1

)print

(alis)

排序演算法 快速排序Python實現

coding utf 8 file quick sort.py author zhang san time 2020 7 17 18 25 des 快速排序 每次選擇乙個pivot,然後以這個pivot為中心,兩邊分別存放比其大或者小的值,依次 迭代進行劃分,最終完成排序 這裡一定要注意指標滑動的方...

演算法 排序 python 實現 快速排序

主要分為兩個子演算法,partition a,p,r 以a r 為基準對陣列進行乙個劃分,比a r 小的放在左邊,比a r 大的放在右邊。quicksort a,p,r 是快速排序的子程式,呼叫劃分程式對陣列進行劃分,然後遞迴地呼叫quicksort a,p,r 以完成快速排序的過程。快速排序的最差...

Python實現快速排序演算法

快速排序 quicksort 1 演算法思想 快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 1 分治法的基本思想 分治法的基本思想是 將原問題分解為若干個規模更小但結構與原問題相似的子問...