def InsertSort(A):
'''插入排序算法:传入一个list,对list中的数字进行排序'''
print('插入排序前list元素顺序:',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('插入排序后的list元素顺序:',A)
#插入排序时间复杂度:n^2,空间复杂度:1,相同元素保持相对不变性(相对位置不变) def BableSort(A):
'''冒泡排序算法:传入一个List,对list中的元素进行排序'''
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,相同元素保持相对不变性 # 归并排序,传入一个list,对list元素进行排序
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=0
j=0
k=0
while 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,相同元素保持顺序不变性 if __name__=='__main__':
listA=[1,5,7,3,4,6,7,8,9,9,15,10,4]
alist = [54,26,93,17,77,31,44,55,20]
#InsertSort(listA)
#BableSort(listA)
MergeSort(alist)

      

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

最新文章

  1. JQuery基础总结下
  2. HTML DOM Element
  3. 【CF】438E. The Child and Binary Tree
  4. RW-50004 While Running adrunfmw during EBS 12.2 Installation
  5. 数论 UVA 11388
  6. JS 去字符串空格 总结
  7. How do I reset Windows Update components?
  8. FFT初步学习小结
  9. HDU 4914 Linear recursive sequence(矩阵乘法递推的优化)
  10. 部署DNS服务
  11. ServiceStack.Text / Newtonsoft.Json 两种json序列化性能比较
  12. Python中从B类中调用A类的方法。
  13. Vue学习笔记一:初识Vue
  14. ES6 浏览器兼容性 和 Transpilation
  15. pythonic语法
  16. python 导出mongoDB数据中的数据
  17. 2-2-求并集A=A∪B-线性表-第2章-《数据结构》课本源码-严蔚敏吴伟民版
  18. 008-centos服务管理
  19. 解决SpringBoot中webScocket不能注入bean的问题
  20. PHP中的prepare准备语句的意义

热门文章

  1. Struts2 Servelet重构
  2. WPF中Expander与ListBox(ItemsControl)嵌套中的问题
  3. java突破------一撸到底(做Java开发,遇到瓶颈是保持现状还是寻求突破?)
  4. SpringCloud - RestTemplate 的三种使用方式
  5. SharePoint如何创建能够继承站点左面导航(Left Navigation)的Web Part页面
  6. 数据库sqlite3在linux中的使用
  7. 第9章 scrapy-redis分布式爬虫
  8. SSIS教程:创建简单的ETL包 -- 5. 添加包部署模型的包配置(Adding Package Configurations for the Package Deployment Model)
  9. 跨域 cookies
  10. js实现点击图片,然后图片放大