python 實現插入排序 氣泡排序 歸併排序

2021-09-01 09:45:37 字數 2018 閱讀 2444

def insertsort(a):

'''插入排序演算法:傳入乙個陣列,對陣列進行排序'''

print('排序前的順序:',a)

length=len(a)

for i in range(1,length):#從第二個開始

key=a[i]

j=i-1

while j>=0 and a[j]>key:

a[j+1]=a[j]

j=j-1

a[j+1]=key

print('排序後的順序:',a)

#插入排序時間複雜度:n^2,空間複雜度:1,相同元素保持相對不變性(相對位置不變)

if __name__=='__main__':

lista=[1,5,7,3,4,6,7,8,9,9,15,10,4]

insertsort(lista)

def bablesort(a):

'''氣泡排序演算法:對陣列進行排序'''

print('氣泡排序前的順序:',a)

length=len(a)

for i in range(1,length):

#rang=range(i)

#for j in reversed(rang):

for j in range(i,0,-1): #range逆序遍歷

if a[j-1]> a[j]:

temp=a[j]

a[j]=a[j-1]

a[j-1]=temp

print('氣泡排序後的順序:',a)

# 氣泡排序時間複雜度為:n^2,空間複雜度1,相同元素保持相對不變性

if __name__=='__main__':

lista=[1,5,7,3,4,6,7,8,9,9,15,10,4]

bablesort(lista)

# 歸併排序,對陣列進行排序

def mergesort(alist):

print("splitting ",alist)

if len(alist)>1:

mid = len(alist)//2#精確除法,取小於等於結果的最大整數,相當於對結果進行向下取整

lefthalf = alist[:mid]

righthalf = alist[mid:]

mergesort(lefthalf)#遞迴呼叫左半部分

mergesort(righthalf)#遞迴呼叫右半部分

#合併過程

i=0j=0

k=0while i < len(lefthalf) and j < len(righthalf):

if lefthalf[i] < righthalf[j]:

alist[k]=lefthalf[i]

i=i+1

else:

alist[k]=righthalf[j]

j=j+1

k=k+1

while i < len(lefthalf):

alist[k]=lefthalf[i]

i=i+1

k=k+1

while j < len(righthalf):

alist[k]=righthalf[j]

j=j+1

k=k+1

print("merging ",alist)

# 歸併排序演算法時間複雜度:n*lgn,空間複雜度:n,相同元素保持順序不變性

參考:

氣泡排序,插入排序 PYTHON

氣泡排序 使用 冒泡策略 把最大的元素移動到序列最右端。在一次冒泡過程中,相鄰元素進行比較。python a 5,4,12,3,5,6,9 def bubble sort num n len num for i in range n 1,0,1 for j in range 1,i 1 if num...

Python實現氣泡排序,選擇排序,插入排序

1.python實現氣泡排序 方法1array 4,5,2,3,8,9,1 def bubblesort array sort true while sort sort false for i in range len array 1 if array i array i 1 temp array ...

python實現插入排序 氣泡排序 快速排序

a 2,4,2,6,5,8,5,56,45,3,23 插入排序類似整理撲克牌,將每一張牌插到其他已經有序的牌中適當的位置。插入排序由n 1趟排序組成,對於p 1到n 1趟,插入排序保證從位置0到位置p上的元素為已排序狀態。簡單的說,就是插入排序總共需要排序n 1趟,從index為1開始,講該位置上的...