在網上看了很多關於快速排序的思路和**實現,自己總結了一下
步驟:一、從一組序列中選擇乙個基準數,把比這個數大的放在一邊,比這個數小的放到另一邊(**中比基準數大的放到右邊,比基準數小的放到左邊)
二、基於基準數進行分割槽,對左右兩邊進行步驟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
(alis)
sorts
(alis,0,
len(alis)-1
(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 分治法的基本思想 分治法的基本思想是 將原問題分解為若干個規模更小但結構與原問題相似的子問...