一、归并排序

-归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分合策略(将问题分(divide)成一些小的问题然后递归求解,而合的阶段则将分的阶段得到的各答案"修补"在一起,分久必合)。

 

1.2 一次归并

- 一次归并
![](https://img2018.cnblogs.com/blog/1226829/201809/1226829-20180924192146754-191792692.png)

如图按照图中的一组数组被分成两半,蓝色和红色都是分别排好序了的

  • 然后按照中间分割区,选两个箭头一个指向左边最小,一个指向右边最小,将两个箭头对应的数比较,把较小的个放入上面的新列表

  • 赋值完成后,将绿色标记自增1。左侧红色标记自增1。

  • 然后继续比较两个数组红色标记处的元素。此时右侧数组元素小,所以将右侧数组标记处元素赋值给绿色数组的绿色标记处。

  • 重复上面的步骤

  • 最后得到结果

这就称为一次归并排序

 

1.3 代码实现一次递归排序
def sort(lst, low, mid, high):
i = low
j = mid +1 # low ----> mid 代表了前面所有拍好序的一个组 mid 到 mid + 1 是乱序部分 mid+1 到最后又是另一个排好序的组
lstm = []
while i <= mid and j <= high:
if lst[i] < lst[j]: #比较两个指针指向的数的大小,把小的一个append到心列表, 并且谁放进去了,谁索引自增一
lstm.append(lst[i])
i += 1
else:
lstm.append(lst[j])
j += 1 # 出现 某一边,可能是左边可能是右边先排完了,将剩下的有序数全部处理添加到新列表
while i <= mid:
lstm.append(lst[i])
i += 1 while j <= high:
lstm.append(lst[j])
j += high
lst[low: high+1] = lstm #最后将拍好序新列表的,赋值回传入的列表的索引段
  • 这样一次归并排序就完成了

 

二、递归实现归并排序
  • 代码实现
def all_sort(lst, low, high):

    if low < high:
mid = (low + high)//2 #1
all_sort(lst, low, mid) #2
all_sort(lst, mid+1, high) #3 sort(lst, low, mid, high) #开始排序
  • 如图 #1处: mid = (low + high)//2 将列表一分为二, #2处递归前半段, #3出递归后半段。

    如:low=0, mid=2时还剩 0, 1, 2 三个数。下次计算mid=(low + high)//2 mid = 1, low=0. 表明只剩下两个数了,然后计算 (0 + 1)//2 = 0 这时low = mid = 0,继续传入#2就不会递归了,

     

    既然是两个数,中间一分开左右都是有序的,将两个数按照大小拍好,然后开始不断的把所有结果和到一起

  • 这就是归并排序的分解 与 合并

归并排序Python 实现的更多相关文章

  1. 归并排序python实现

    归并排序python实现 归并排序 归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法 首先是一个例子 原序先通过一半一半的拆分,然后: 然后再一步一步的向上合并,在合并的过 ...

  2. 归并排序python实现源码

    将开发过程经常用到的一些代码片段收藏起来,下面的资料是关于归并排序python实现的代码,应该能对码农们有一些用. def mergesort(arr): if len(arr) == 1: retu ...

  3. 归并排序(Python)

    一.采用分治策略:将原问题划分成n个规模较小的但结构和原问题相同的子问题,递归解决这些子问题后合并各个结果从而得到原问题的解. 二.分治策略的步骤: 分解:将原问题分解成一系列子问题 解决:子问题粒度 ...

  4. 经典算法之归并排序——python和JS实现

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:韩忠康 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...

  5. 归并排序-Python实现

    归并排序(MergeSort) 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)(大O符号).1945年由约翰·冯·诺 ...

  6. 高速排序,归并排序,堆排序python实现

    高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*l ...

  7. 常见排序算法-Python实现

    常见排序算法-Python实现 python 排序 算法 1.二分法     python    32行 right = length-  :  ]   ):  test_list = [,,,,,, ...

  8. python数据结构与算法——归并排序

    归并排序: 原理与C语言实现 参考:白话经典算法系列之五 归并排序的实现 1. 容易对有序数组A,B进行排序. 2. 为了使得A,B组内数据有序:可以将A,B组各自再分成二组. 3. 经过不断分组,当 ...

  9. 你需要知道的九大排序算法【Python实现】之归并排序

    四.归并排序 基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列.归并过程:比 ...

随机推荐

  1. 编写脚本实现DHCP服务与DHCP中继自动化执行

    编写脚本实现DHCP服务与DHCP中继自动化执行 本脚本是在liunx搭建DHCP服务器以及DHCP中继服务器实验环境下实现的https://www.cnblogs.com/yuzly/p/10539 ...

  2. 利用Python通过频谱分析和KNN完成iphone拨号的语音识别

    最近这段时间,学校里的事情实在太多了,从七月下旬一直到八月底实验室里基本天天十二点或者通宵,实在是没有精力和时间来写博客.这周老师出国开会,也算有了一个短暂的休息机会,刚好写点有意思的东西. 上周在天 ...

  3. 安装Window 10系统------计算机经验

    为什么这次安装window10系统呢?不是和window7系统的安装方法一样么?如果你是这样的想的话,是不完全对的,因为window10系统的安装有些繁杂,需要耐心.下面我就准备了官方原版的windo ...

  4. [福大软工] Z班 第7次成绩排行榜

    作业要求 http://www.cnblogs.com/easteast/p/7668887.html 评分细则 本次作业评分较为简单,只包含了两个方面的得分,一个是团队任务的计划(10'),一个是采 ...

  5. JavaScript数据类型之数字类型

    引言 JavaScript不区分整数值和浮点数值,全部使用浮点数值表示.当一个数字直接出现在JavaScript程序中,我们称之为数字直接量(numeric litertal).JavaScript支 ...

  6. 【HNOI2016】大数

    [HNOI2016]大数 题目链接 题目描述 小 B 有一个很大的数 $ S $,长度达到了 $ N $ 位:这个数可以看成是一个串,它可能有前导 $ 0 $,例如 00009312345 .小 B ...

  7. 关于图片的Base64编码

    什么是Base64编码 Base64编码是一种图片处理格式,通过特定的算法将图片编码成一长串字符串,在页面上显示的时候,可以用该字符串来代替图片的url属性. base64编码就是长得像下面这样子的代 ...

  8. UVA11491-Erasing ans Winning(贪心)

    Problem UVA11491-Erasing ans Winning Accept: 799  Submit: 5753Time Limit: 3000 mSec Problem Descript ...

  9. 基于BeautifulSoup库的HTML内容的查找

    一.BeautifulSoup库提供了一个检索的参数: <>.find_all(name,attrs,recursive,string,**kwargs),它返回一个列表类型,存储查找的结 ...

  10. skip-thought vector 实现Sentence2vector

    1.常见文本相似度计算方法 常见的短文本相似度计算方法目前有很多中,但这些短文本相似度计算方法都只是提取了短文本中的浅层特征,而无法提取短文本中的深层特征.目前常见的文本相似度计算方法有: 1)简单共 ...