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