常見排序演算法的python實現

2021-10-01 15:25:15 字數 3621 閱讀 2681

#氣泡排序和選擇排序

defbubblesort

(alist)

:for i in

range

(len

(alist)-1

,0,-

1):for j in

range

(i):

if alist[j]

> alist[j+1]

: alist[j]

,alist[j+1]

= alist[j +1]

,alist[j]

return alist

alist =[1

,8,3

,5,9

]bubblesort(alist)

print

(bubblesort(alist)

)#選擇排序

defselectionsort

(alist)

:for i in

range

(len

(alist)-1

,0,-

1): maxindex =

0for j in

range(1

,i+1):

if alist[j]

> alist[maxindex]

: maxindex = j

alist[i]

,alist[maxindex]

= alist[maxindex]

,alist[i]

alist =[1

,8,3

,5,9

,16,22

,99,2

,100

]selectionsort(alist)

print

(alist)

#插入排序

definsertionsort

(alist)

:for index in

range

(len

(alist)):

currentvalue = alist[index]

while index >

0and alist[index -1]

> currentvalue:

alist[index]

= alist[index -1]

index = index -

1 alist[index]

= currentvalue

alist =[8

,6,3

,3,3

,5]insertionsort(alist)

print

(alist)

#謝爾排序

defshell_sort

(alist)

: n =

len(alist)

#初始步長

step = n //

2while step >0:

#按步長進行插入排序

for i in

range

(step,n)

: j = i

#插入排序

while j >= step and alist[j-step]

> alist[j]

: alist[j-step]

,alist[j]

= alist[j]

,alist[j-step]

j -= step

#得到新的步長

step = step //

2return alist

alist =[1

,8,3

,5,9

,16,22

,99,2

,100

]print

(shell_sort(alist)

)#歸併排序

defmerge_sort

(list):

iflen

(list

)<=1:

return

list

middle =

len(

list)//

2 left = merge_sort(

list

[:middle]

) right = merge_sort(

list

[middle:])

merged =

while left and right:

if left[0]

<= right[0]

:0))

else:0

))merged.extend(right if right else left)

return merged

list=[

1,8,

3,5,

9,16,

22,99,

2,100]

print

(merge_sort(

list))

#快速排序

defquicksort

(alist,first,last)

:if first < last:

splitpoint = partition(alist,first,last)

quicksort(alist,first,splitpoint-1)

quicksort(alist,splitpoint+

1,last)

defpartition

(alist,first,last)

: pivotvalue = alist[first]

leftmark = first +

1 rightmark = last

done =

false

while

not done:

while rightmark >= leftmark and alist[leftmark]

<= pivotvalue:

leftmark +=

1while rightmark >= leftmark and alist[rightmark]

>= pivotvalue:

rightmark -=

1if rightmark < leftmark:

done =

true

else

: alist[rightmark]

, alist[leftmark]

= alist[leftmark]

, alist[rightmark]

alist[first]

,alist[rightmark]

= alist[rightmark]

,alist[first]

return rightmark

list=[

31,556,26,

20,17,

55]quicksort(

list,0

,len

(list)-

1)print

(list

)

python 實現常見排序演算法

coding utf 8 bubble sort 氣泡排序 時間複雜度最壞為o n2 最優的為n import time def bubble sort alist 氣泡排序 param alist return cur 1 while cur len alist 1 and len alist 1...

常見排序演算法Python實現

氣泡排序 最優時間複雜度 o n 最壞時間複雜度 o n 2 穩定性 穩定 def bubble sort alist 氣泡排序 for j in range len alist 1,0,1 count 0 for i in range j if alist i alist i 1 alist i ...

常見排序演算法 python實現

穩定性是指序列中相同的數字在排序後相對位置不發生改變 常見的且穩定的排序演算法有冒泡 歸併 插入,其餘的為非穩定的排序演算法 def bubble sort alist for j in range len alist 1 0,1 for i in range j if alist i alist ...