python 實現插入排序、冒泡排序、歸並排序
阿新 • • 發佈:2018-06-14
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逆序遍歷 23if 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) 34if 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 實現插入排序、冒泡排序、歸並排序