python實現各種排序

2021-09-13 14:19:45 字數 3087 閱讀 2101

def

bubble_sort

(arry)

:#獲得陣列的長度

n =len(arry)

for i in

range

(n):

for j in

range(1

,n-i)

:#如果前者比後者大

if arry[j-1]

> arry[j]

:#則交換兩者

arry[j-1]

,arry[j]

= arry[j]

,arry[j-1]

return arry

def

select_sort

(ary)

: n =

len(ary)

for i in

range(0

,n):

#最小元素下標標記

min= i

for j in

range

(i+1

,n):

if ary[j]

< ary[

min]

:#找到最小值的下標

min= j

#交換兩者

ary[

min]

,ary[i]

= ary[i]

,ary[

min]

return ary

def

insert_sort

(ary)

: n =

len(ary)

for i in

range(1

,n):

if ary[i]

< ary[i-1]

: temp = ary[i]

#待插入的下標

index = i

#從i-1 迴圈到 0 (包括0)

for j in

range

(i-1,-

1,-1

):if ary[j]

> temp :

ary[j+1]

= ary[j]

#記錄待插入下標

index = j

else

:break

ary[index]

= temp

return ary

def

quick_sort

(ary)

:return qsort(ary,0,

len(ary)-1

)def

qsort

(ary,left,right)

:#快排函式,ary為待排序陣列,left為待排序的左邊界,right為右邊界

if left >= right :

return ary

key = ary[left]

#取最左邊的為基準數

lp = left #左指標

rp = right #右指標

while lp < rp :

while ary[rp]

>= key and lp < rp :

rp -=

1while ary[lp]

<= key and lp < rp :

lp +=

1 ary[lp]

,ary[rp]

= ary[rp]

,ary[lp]

ary[left]

,ary[lp]

= ary[lp]

,ary[left]

qsort(ary,left,lp-1)

qsort(ary,rp+

1,right)

return ary

def

heap_sort

(ary)

: n =

len(ary)

#最後乙個非葉子節點

first =

int(n/2-

1)#構造大根堆

for start in

range

(first,-1

,-1)

:

max_heapify(ary,start,n-1)

#堆排,將大根堆轉換成有序陣列

for end in

range

(n-1,0

,-1)

:

ary[end]

,ary[0]

= ary[0]

,ary[end]

max_heapify(ary,

0,end-1)

return ary

#最大堆調整:將堆的末端子節點作調整,使得子節點永遠小於父節點

#start為當前需要調整最大堆的位置,end為調整邊界

defmax_heapify

(ary,start,end)

: root = start

while

true

:#調整節點的子節點

child = root*2+

1if child > end :

break

if child+

1<= end and ary[child]

< ary[child+1]

:#取較大的子節點

child = child+

1#較大的子節點成為父節點

if ary[root]

< ary[child]

:#交換

ary[root]

,ary[child]

= ary[child]

,ary[root]

root = child

else

:break

用Python實現各種排序演算法

比較相鄰的元素大小,將小的前移,大的後移,就像水中的氣泡一樣,最小的元素經過幾次移動,會最終浮到水面上。def bubble list for i in range len list for j in range 0,len list 1 i if list j list j 1 list j li...

各種排序演算法的Python實現

最近剛剛接觸python,python語法簡潔清晰,具有很好的易讀性,編寫的演算法可以很容易的看出其本質。故而用python編寫演算法,既可以熟悉演算法,又可以練習python,何樂而不為呢?插入排序 def insertsort lists for i in range 0,len lists 1...

各種排序演算法實現

1 選擇排序 最壞情況 時間複雜度為o n 2 平均時間複雜度o n 2 最好情況 時間複雜度為o n 2 最差空間複雜度 需要輔助空間o 1 不是穩定排序 實現 void swap int a,int b void selectionsort int a,int n if k i swap a i...