排序算法四:归并排序基本原理以及Python实现
来源:互联网 发布:北京邮电大学 网络 编辑:程序博客网 时间:2024/06/06 00:09
1. 基本原理
归并排序建立在归并操作上的一种算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是将两
个已经有序的序列合成一个有序的序列的过程。
因此,对于一个待排序的序列来说,首先要将其进行分割,得到有序的子序列,再进行归并操作,最终得到有序的序列。
归并的基本思想
假设有两个有序的序列,需要合成一个序列。其实就是不断的比较两个序列开头的元素大小就可以。
if a[0] > b[0]
将a[0]存入另一个设置好的空序列C中
else
将b[0]存入另一个设置好的空序列C中
if length(a)==0 或者length(b)==0
上述操作结束
总体的思想就是不断的比较两个序列的第一个元素并存入第三个序列中,再释放原序列中的第一个元素。
分割的基本思想
分割就是将原序列不断的进行分割,以便得到有序的子序列,进行归并操作。整理介绍二分割。就是在序列的中间进行分割。
显然,对于比较长的序列需要进行多次的分割操作,使得每个子序列的元素个数只有一个。只有这样,才能得到有序的子序列,进
行归并操作。
这样话就需要对原序列进行一个递归的分割操作。得到最终的我们需要的子序列。
一个例子
这里有一个随机生成的包含了10个元素的待排序的序列
按照上述的基本思想,其分割和归并的流程为:
从上面可以很清楚的看到,首先需要进行分割,然后对分割的子序列进行一个归并操作,最终得到排序完成
的新序列。
2. Python实现
归并操作实现
def mergeTwoArray(a,b): m=a.__len__() n=b.__len__() c=[] while m>0 and n>0: if a[0]<b[0]: c.append(a[0]) a.pop(0) m=a.__len__() #k+=1 else: c.append(b[0]) b.pop(0) n=b.__len__() while m>0 and n==0: c.append(a[0]) a.pop(0) m=a.__len__() while n>0 and m==0: c.append(b[0]) b.pop(0) n=b.__len__() return c
归并排序实现
def myMergeSort(a): if a.__len__()<=1: return a middleIndex=a.__len__()//2 leftArray=myMergeSort(a[:middleIndex])#左边有序 #print('左边序列有序的过程:') print(leftArray) #print() rightArray=myMergeSort(a[middleIndex:])#右边有序 #print('右边序列有序的过程:') print(rightArray) return mergeTwoArray(leftArray,rightArray)#再合并两个有序的小数组,实现归并的思想
输出结果
3. 时间复杂度分析
并排序的效率是比较高的,设数列长为
度可以记为O(N),故一共为
的几种排序方法(快速排序,归并排序,希尔排序,堆排序)也是效率比较高的。
- 排序算法四:归并排序基本原理以及Python实现
- 排序算法三:堆排序基本原理以及Python实现
- python实现排序算法二:归并排序
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- 归并排序(基本思想以及算法实现)
- 排序算法总结(归并排序、快速排序)(python实现)
- 排序算法(python)-归并排序
- Python归并排序算法
- Python:归并排序算法
- 归并排序算法的python实现
- python算法实现系列-归并排序
- 排序算法—归并排序算法分析与实现(Python)
- python实现归并排序
- Python 实现归并排序
- python实现归并排序
- Python实现归并排序
- python实现归并排序
- jieba和thulac使用比较
- SpringMVC的运行原理及整合
- HDU 2147-kiki's game
- DOM遍历
- Andriod 安全之Windows下CTS自动化测试环境的搭建
- 排序算法四:归并排序基本原理以及Python实现
- 2017.8.21
- Dynamics CRM 之Ribbon隐藏button
- Android 自定义控件canvas- Layer图层
- 每天积累(一一)---JVM的内存结构
- Java基础——Servlet(四)
- SETP7 Basic V11 SP1
- ubuntu 报错 /bin/bash xx:坏的解释器:没有那个文件或目录
- 实施 IT 战略规划,企业信息化不同的发展阶段的3种路线