1. 归并排序--while版本

def merge_sort_while(b_list):
'''归并排序--while版本'''
num = len(b_list)
if num <= 1:
return b_list middle = num // 2 # left 采用归并排序后形成的有序的新列表
left_list = merge_sort_while(b_list[:middle]) # right 采用归并排序后形成的有序的新列表
right_list = merge_sort_while(b_list[middle:]) right_pointer = left_pointer = 0
res = []
# 将连个有序的子列表合并为一个新的列表
while left_pointer < len(left_list) and right_pointer < len(right_list):
if right_list[right_pointer] < left_list[left_pointer]:
res.append(right_list[right_pointer])
right_pointer += 1
else:
res.append(left_list[left_pointer])
left_pointer += 1 res += left_list[left_pointer:]
res += right_list[right_pointer:] return res

2. 测试用例

if __name__ == '__main__':
b_list = [3,2,1,8,7,5]
print(merge_sort_while(b_list))

3. 算法时间复杂度分析

  • 最坏时间复杂度:O(nlog2n)
  • 最好时间复杂度:O(nlog2n)
  • 稳定性:稳定

归并排序(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 实现

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

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

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

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

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

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

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

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

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

随机推荐

  1. RapidJson 的使用

    rapidjson为了最大化性能,大量使用了浅拷贝,使用之前一定要了解清楚.如果采用了浅拷贝,特别要注意局部对象的使用,以防止对象已被析构了,却还在被使用. rapidjson使用注意点: 1.对不存 ...

  2. IOS逆向-砸壳笔记

    本人ios10.3.1 iphone6越狱机.方案三个. 方案一.dumpdecrypted.dylib 1. ssh到越狱机上,看WeChat可执行文件在哪. # ps aux|grep WeCha ...

  3. 【iCore4 双核心板_ARM】例程二十七:LWIP_NETIO实验——以太网测速

    实验现象: 核心代码: int main(void) { system_clock.initialize(); led.initialize(); adc.initialize(); delay.in ...

  4. 机器学习&深度学习基础(tensorflow版本实现的算法概述0)

    tensorflow集成和实现了各种机器学习基础的算法,可以直接调用. 代码集:https://github.com/ageron/handson-ml 监督学习 1)决策树(Decision Tre ...

  5. Linux之文件系统各种符号说明

    / 根目录 唯一必须挂载的目录.不要有任何的犹豫,选一个分区,挂载它!(在绝大多数情况下,有10G的容量应该是够用了.当然了,很多东西都是多多益善的) /boot 它包含了操作系统的内核和在启动系统过 ...

  6. 深度学习中交叉熵和KL散度和最大似然估计之间的关系

    机器学习的面试题中经常会被问到交叉熵(cross entropy)和最大似然估计(MLE)或者KL散度有什么关系,查了一些资料发现优化这3个东西其实是等价的. 熵和交叉熵 提到交叉熵就需要了解下信息论 ...

  7. webapi 统一处理时间格式

    public class UnixDateTimeConvertor : DateTimeConverterBase { public override object ReadJson(JsonRea ...

  8. 【奇淫技巧】API接口字段table文档转代码工具

    今天做一个视频接口对接,发现对方提供的文档没有json格式,无法自动生成请求和响应对象 json自动生成C#类的工具 http://tool.sufeinet.com/Creater/JsonClas ...

  9. 从composer上在本地创建一个项目

    在想要创建项目的目录下,输入以下代码

  10. [LeetCode] Basic Calculator IV 基本计算器之四

    Given an expression such as expression = "e + 8 - a + 5" and an evaluation map such as {&q ...