排序算法—归并排序算法分析与实现(Python)
2015-12-28 13:41
447 查看
December 28, 2015 1:32 PM
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为:
- 1)划分子表
- 2)合并半子表
归并算法用示意图表示如下:
运行结果:
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为:
- 1)划分子表
- 2)合并半子表
归并算法用示意图表示如下:
[code]#MergeSort.py #王渊 #2015.12.23 #Email:wyxidian@gmail.com from pylab import * def MSort(dataA, dataB): #子表合并排序 newData = [] lengthA = dataA.__len__() lengthB = dataB.__len__() while(lengthA>0 and lengthB>0): #两个子表均非空,依次取出第一个元素作比较 if(dataA[0]<dataB[0]): #取出较小的元素插入新表 newData.append(dataA[0]) dataA = dataA[1:lengthA] else: newData.append(dataB[0]) dataB = dataB[1:lengthB] lengthA = dataA.__len__() lengthB = dataB.__len__() if(lengthA>0): #将剩余非空表中元素插入新表中 newData = newData+dataA else: newData = newData+dataB return newData def MergeSort(data): length = data.__len__() flag = mod(length,4) step = 2 #每次按照2的整次幂将序列两两合并排序 while step<length: for i in range(length//2): data[step*i:step*i+step] = MSort(data[step*i:step*i+step//2], data[step*i+step//2:step*i+step]) if(mod((length//step),2)==1): data[step*(i+1):length] = MSort(data[step*(i+1):step*(i+1)+step//2], data[step*(i+1)+step//2:length]) step = step*2 data = MSort(data[0:step//2], data[step//2:length]) return data data = [48,1,16,62,73,88,24,59,99,0,35] print("The original data is : ", data) data = MergeSort(data) print("The result of sorted data is : ", data)
运行结果:
[code]The original data is : [48 1 16 62 73 88 24 59 99 0 35] The result of sorted data is : [ 0 1 16 24 35 48 59 62 73 88 99]
相关文章推荐
- Python标准库05 存储对象 (pickle包,cPickle包)
- Python正则表达式
- 我的Python成长之路---第一天---Python基础(4)---2015年12月26日(雾霾)
- 可能是最简单的感知机算法
- Python 字符串
- Python ACCESS学习(二) 创建文件链接ACCESS数据库
- python 遍历文件夹和子目录抓出自己想用的文件类型
- 关于Python中的for循环控制语句
- Python -- 使用SMTP发送邮件
- Ubuntu14.04-Python2.7-Virtualenv-Django1.9-MySQL完整环境配置
- Python验证码识别处理实例
- 【python】发送邮件
- python环境配置
- 我的Python成长之路---第一天---Python基础(3)---2015年12月26日(雾霾)
- python 访问数据库 SQLAlchemy中的Query方法
- python sqlalchemy操作
- Python版九九乘法表
- Python之线程、进程和协程
- Python之socket(套接字)补充
- python_关于实例化类