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

python 实现插入排序、冒泡排序、归并排序的更多相关文章

  1. C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

    C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...

  2. 疯狂的Java算法——插入排序,归并排序以及并行归并排序

    从古至今的难题 在IT届有一道百算不厌其烦的题,俗称排序.不管是你参加BAT等高端笔试,亦或是藏匿于街头小巷的草根笔试,都会经常见到这样一道百年难得一解的问题. 今天LZ有幸与各位分享一下算法届的草根 ...

  3. Python与Go冒泡排序

    #!/usr/bin/env python # -*- coding: utf-8 -*- # 冒泡排序法 def bubbling(array): # 时间复杂度:O(n^2) for i in r ...

  4. 史上最详细的C语言和Python的插入排序算法

    史上最详细的C语言和Python的插入排序算法插入排序原理:所谓插入排序,就像我们在打牌(斗地主)时,整理我们自己手中自己的牌一样,就像是2,1,3,9,J,K,5,4,这四张牌.我们要把它其中的几张 ...

  5. 【PAT甲级】1089 Insert or Merge (25 分)(插入排序和归并排序)

    题意: 输入一个正整数N(<=100),接着输入两行N个整数,第一行表示初始序列,第二行表示经过一定程度的排序后的序列.输出这个序列是由插入排序或者归并排序得到的,并且下一行输出经过再一次排序操 ...

  6. 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序

    最近在准备笔试题和面试题,把学到的东西整理出来,一来是给自己留个笔记,二来是帮助大家学习. 题目: 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例:  输入:[1,2,3,5,2, ...

  7. 三种排序算法python源码——冒泡排序、插入排序、选择排序

    最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...

  8. Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)

    一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...

  9. [MIT6.006] 3. Insertation Sort, Mege Sort 插入排序,归并排序

    关于第2节课<Models of Computation, Document Distance>由于内容过于简单,所以不在这里进行记录,它主要就是讲了Python很多操作是constant ...

随机推荐

  1. unity优化测试插件推荐:内存分析,数据监控,弱网模拟

    1.内存分析插件,unity官方出品 官方地址:https://bitbucket.org/Unity-Technologies/memoryprofiler 我整理的:https://downloa ...

  2. springboot-1-介绍

    之前跟着一个博主学过springboot, 但不怎么全面, 最近看了本书, 汪云飞的springboot 实战, 发现springboot太强大了, 跟着书重新走一遍... 边写边记录 http:// ...

  3. sourceTree git 空目录从远程仓库克隆代码出现warning: templates not found

    解决办法: 在安装git时没有默认安装到c盘,而是安装到了d盘.在使用SourceTree进行代码克隆时提示warning: templates not found in D:\software\de ...

  4. DataSet常用简单方法

    Clear移除表中所有行来清除任何数据的DataSet Clone赋值该DataSet的结构但不复制数据 Copy赋值DataSet的结构和数据 Dispose释放DataSet对象 Equals确定 ...

  5. C# 类库下 读取不到config里节点的问题

    前提:要在当前项目下App.config配置信息里读取连接数据库的字符串.忘记创的是个类库.导致一直报错(对象未实例) 解决办法: 程序运行不会读取本项目下的app.config文件(实际它只是个模板 ...

  6. 撩课-Java每天10道面试题第1天

    1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...

  7. 设计模式之——外观or门面模式

    1.概念 定义一个高层的统一的外观接口类,该接口用于客户端调用,和一个实现类用来包装子系统中多个类,客户端可以通过客户端完成对子系统的方法调用. 2.适用场景 2.1 代码移植,降低了现有系统的复杂度 ...

  8. maven私服的搭建

    前言: 为什么要有maven私服? 当我们在公司开发时,如果每个程序员都需要连接外网去下载maven的jar包,当同时开发时,就会造成网络资源浪费,因此,maven提出了私服的概念,当公司内部程序员进 ...

  9. 非法关闭idea后报错,插件无法正常加载解决方法

    Problems found loading plugins: Plugin "GlassFish Integration" was not loaded: required pl ...

  10. HDOJ2037 今年暑假不AC (经典的贪心问题)

    Description “今年暑假不AC?” “是的.” “那你干什么呢?” “看世界杯呀,笨蛋!” “@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会 ...