1. 程式人生 > >python 實現插入排序、冒泡排序、歸並排序

python 實現插入排序、冒泡排序、歸並排序

left img 空間復雜度 不變性 ima 最大 ive 冒泡排序 實現

  1 def InsertSort(A):
  2 	‘‘‘插入排序算法:傳入一個list,對list中的數字進行排序‘‘‘
  3 	print(‘插入排序前list元素順序:‘,A)
  4 	length=len(A)
  5 	for i  in range(1,length):#從第二個開始
  6 		key=A[i]
  7 		j=i-1
  8 		while j>=0 and A[j]>key:
  9 			A[j+1]=A[j]
 10 			j=j-1
 11 		A[j+1]=key
 12 	print(‘插入排序後的list元素順序:‘,A)
 13
#插入排序時間復雜度:n^2,空間復雜度:1,相同元素保持相對不變性(相對位置不變) 14 15 def BableSort(A): 16 ‘‘‘冒泡排序算法:傳入一個List,對list中的元素進行排序‘‘‘ 17 print(‘冒泡排序前的順序:‘,A) 18 length=len(A) 19 for i in range(1,length): 20 #rang=range(i) 21 #for j in reversed(rang): 22 for j in range(i,0,-1): #range逆序遍歷 23
if A[j-1]> A[j]: 24 temp=A[j] 25 A[j]=A[j-1] 26 A[j-1]=temp 27 28 print(‘冒泡排序後的順序:‘,A) 29 # 冒泡排序時間復雜度為:n^2,空間復雜度1,相同元素保持相對不變性 30 31 # 歸並排序,傳入一個list,對list元素進行排序 32 def MergeSort(alist): 33 print("Splitting ",alist) 34
if len(alist)>1: 35 mid = len(alist)//2#精確除法,取小於等於結果的最大整數,相當於對結果進行向下取整 36 lefthalf = alist[:mid] 37 righthalf = alist[mid:] 38 39 MergeSort(lefthalf)#遞歸調用左半部分 40 MergeSort(righthalf)#遞歸調用右半部分 41 42 #合並過程 43 i=0 44 j=0 45 k=0 46 while i < len(lefthalf) and j < len(righthalf): 47 if lefthalf[i] < righthalf[j]: 48 alist[k]=lefthalf[i] 49 i=i+1 50 else: 51 alist[k]=righthalf[j] 52 j=j+1 53 k=k+1 54 55 while i < len(lefthalf): 56 alist[k]=lefthalf[i] 57 i=i+1 58 k=k+1 59 60 while j < len(righthalf): 61 alist[k]=righthalf[j] 62 j=j+1 63 k=k+1 64 print("Merging ",alist) 65 # 歸並排序算法時間復雜度:n*lgn,空間復雜度:n,相同元素保持順序不變性 66 67 68 if __name__==‘__main__‘: 69 listA=[1,5,7,3,4,6,7,8,9,9,15,10,4] 70 alist = [54,26,93,17,77,31,44,55,20] 71 #InsertSort(listA) 72 #BableSort(listA) 73 MergeSort(alist)

技術分享圖片 技術分享圖片

參考:http://interactivepython.org/courselib/static/pythonds/SortSearch/TheMergeSort.html

python 實現插入排序、冒泡排序、歸並排序