python基礎演算法 2021 1 11

2021-10-14 11:06:39 字數 1431 閱讀 5340

#快速排序

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 是插入排序的一種。也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本,該方法的基本思想是 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基本有序 增量足夠...