#快速排序
defkuaisu
(a,low,high)
:if low>high:
return
left=low
right=high
flag=a[low]
while
(left:while
(right>left and a[right]
>=flag)
: right-=
1 a[left]
=a[right]
while
(right>left and a[left]
: left+=
1 a[right]
=a[left]
a[left]
=flag
kuaisu(a,low,left-1)
kuaisu(a,right+
1,high)a=[
1,5,
3,6,
7,2,
1]kuaisu(a,0,
len(a)-1
)
思路
1.先確定乙個基準數(flag),通常為第乙個元素。將left指向第乙個元素,right指向最後乙個元素。
2.從右邊開始,向前遍歷找到第乙個小於基準數的元素,下標為right,賦值給left指向的節點
3.left不動,從左邊開始,向後遍歷找到第乙個大於基準數的元素,下標為left,賦值給right指向的節點
4.重複2,3直到left==right時停止,此時將基準數賦值給下標為left(right)的節點。此時基準數左邊的數都比他小,右邊都比他大。
5.將基準數左邊的陣列段,和右邊的陣列段分別重複1,2,3,4,5(遞迴)操作。
注意點:
1.遞迴的結束條件是傳入的開始下標大於等於結束下標
2.出現與基準數相同的數,當作大於基準數處理
def
xier
(a):
length=
len(a)
grad=length//
2while
(grad>0)
:for i in
range
(grad,length)
: j=i
flag=a[i]
while j>grad and a[j-grad]
>a[j]
: a[j]
=a[j-grad]
j-=grad
a[j]
=flag
grad//=2a=
[1,5
,2,7
,3]xier(a)
print
(a)
常用排序基礎演算法 python
基本思想 兩個數比較大小,較大的數下沉,較小的數冒起來。過程 平均時間複雜度 o n2 引用from random import randint defbubble sort arr,order true 氣泡排序演算法 param arr 需要排序的陣列 param order 排序方向預設為tr...
Python演算法(基礎) 選擇排序
選擇排序 選擇排序改進了氣泡排序,每次遍歷列表只做一次交換。為了做到這一點,選擇排序在遍歷時尋找最大的值,並在完成遍歷後,將其放置在正確的位置。遍歷 n 1 次,排序 n 個項。以下展示了整個排序過程。你可能會看到選擇排序與氣泡排序有相同數量的比較,因此也是o n2 然而,由於交換數量的減少,選擇排...
Python演算法(基礎) 希爾排序
希爾排序 希爾排序 shell sort 是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本,該方法的基本思想是 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠...