python 实现插入排序冒泡排序归并排序
Posted Jean_V
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 实现插入排序冒泡排序归并排序相关的知识,希望对你有一定的参考价值。
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 实现插入排序冒泡排序归并排序的主要内容,如果未能解决你的问题,请参考以下文章
C# 各种内部排序方法的实现(直接插入排序希尔排序冒泡排序快速排序直接选择排序堆排序归并排序基数排序)
C# 各种内部排序方法的实现(直接插入排序希尔排序冒泡排序快速排序直接选择排序堆排序归并排序基数排序)