归并排序(Python实现)
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实现)的更多相关文章
- 归并排序python实现
归并排序python实现 归并排序 归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法 首先是一个例子 原序先通过一半一半的拆分,然后: 然后再一步一步的向上合并,在合并的过 ...
- 归并排序python实现源码
将开发过程经常用到的一些代码片段收藏起来,下面的资料是关于归并排序python实现的代码,应该能对码农们有一些用. def mergesort(arr): if len(arr) == 1: retu ...
- 归并排序(Python)
一.采用分治策略:将原问题划分成n个规模较小的但结构和原问题相同的子问题,递归解决这些子问题后合并各个结果从而得到原问题的解. 二.分治策略的步骤: 分解:将原问题分解成一系列子问题 解决:子问题粒度 ...
- 经典算法之归并排序——python和JS实现
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:韩忠康 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- 归并排序-Python实现
归并排序(MergeSort) 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)(大O符号).1945年由约翰·冯·诺 ...
- 归并排序Python 实现
一.归并排序 -归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分合策略(将问题分(divide)成一些小的问题然后递归求解,而合的阶段则将分的阶段得到的各答案&q ...
- 高速排序,归并排序,堆排序python实现
高速排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n^2),平均情况下为O(n*logn),是不稳定的排序 归并排序的时间复杂度最好情况下为O(n*logn),最坏情况下为O(n*l ...
- 常见排序算法-Python实现
常见排序算法-Python实现 python 排序 算法 1.二分法 python 32行 right = length- : ] ): test_list = [,,,,,, ...
- python数据结构与算法——归并排序
归并排序: 原理与C语言实现 参考:白话经典算法系列之五 归并排序的实现 1. 容易对有序数组A,B进行排序. 2. 为了使得A,B组内数据有序:可以将A,B组各自再分成二组. 3. 经过不断分组,当 ...
- 你需要知道的九大排序算法【Python实现】之归并排序
四.归并排序 基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列.归并过程:比 ...
随机推荐
- java.exe和javaw.exe的区别
相同点:二者都是Java的虚拟机,用来执行Java程序 区别: 1. javaw.exe运行程序时不会输出控制台信息 (注:“w”就是window的意思). 使用案例 start.bat(y以下代码 ...
- mysql like 查不到结果 中文 查询优化
[参考]mysql like %keyword%不走索引替代方法 在使用msyql进行模糊查询的时候,很自然的会用到like语句,通常情况下,在数据量小的时候,不容易看出查询的效率,但在数据量达到百万 ...
- SQL查看当前数据库所有请求的情况,包括登录用户,登录时间,连接数目
SQL Code: ALTER PROCEDURE [dbo].[sp_sys_ConnStatus] AS BEGIN /************************************** ...
- Linux常见问题整理
1. 操作系统应该要控制硬件的哪些单元? 运算单元.控制单元.寄存器组.总线接口单元.输入/输出接口单元. 2. 一个较为完整的操作系统应该包含哪些部分? 比较完整的操作系统应该包含两个组件,一个是核 ...
- 使用 ES2015 编写 Gulp 构建
Gulp 自 v3.9.0 版本增加对 Babel 的支持,也就是说可以使用 ES2015 语法来编写 gulp 任务. 检查 gulp 版本 $ gulp -v 确保 gulp-cli 和 gulp ...
- Java字符串连接的多种实现方法及效率对比
JDK 1.8(Java 8)里新增String.join()方法用于字符串连接.本文基于<Java实现String.join()和效率比较>一文,分析和比较四种自定义实现与String. ...
- 六、Sql Server 基础培训《进度6-更新删除(实际操作)》
知识点: 假设,创建表test1,test2. drop table test1 create table test1 ( FID int identity(1,1), FBillNo varchar ...
- vue filter方法-时间格式化
plugins/filter.js import Vue from 'vue' // 时间格式化 // 用法:<div>{{data | dataFormat('yyyy-MM-dd hh ...
- 关于vb编程之字符串连接/拼接的方法与技巧
在VB中,笔者知道的字符串的拼接方法主要有两种拼接符号,一种为"&"符,另一种则为"+"符 一.其中&连接运算符用于强制将两个表达式作为字符串连 ...
- python2.7环境下的flask项目导入模块失败解决办法
如下一个flask项目的目录: 这个flask项目在python3.6环境下可以正常启动,但是在python2.7环境下如下报错提示: 提醒模块找不到.如下解决方法: 只需要在views目录里面加一个 ...