python归并排序 分词_python-归并排序
代码环境:python3.6
归并排序采用分治法,思想是:先递归拆分数组,再合并数组。
1、拆分数组
假设数组一共有 n 个元素,我们递归对数组进行折半拆分即n//2,直到每组只有一个元素为止。
2、合并数组
算法会从最小数组开始有序合并,这样合并出来的数组一直是有序的,所以合并两个有序数组是归并算法的核心,这里用两个简单数组示例:
步骤1:新建一个空数组存放合并结果,用l和r两个辅助指针记录两个数组当前操作位置;
步骤2:从左到右逐一比较两个小数组中的元素,较小的元素先放入新数组,指针移位,直到l或r指针超出尾部;
步骤3:指针尚未移到尾部的数组,说明还有剩余元素,将剩余元素合并到新数组尾部。
算法实现
def merge(list_left, list_right):
"""
入参数组都是有序的,此处将两个有序数组合并成一个大的有序数组
"""
# 两个数组的起始下标
l, r = 0, 0
new_list = []
while l < len(list_left) and r < len(list_right):
if list_left[l] < list_right[r]:
new_list.append(list_left[l])
l += 1
else:
new_list.append(list_right[r])
r += 1
new_list += list_left[l:]
new_list += list_right[r:]
return new_list
def merge_sort(mylist):
"""归并排序
mylist: 待排序数组
return: 新数组list
"""
if len(mylist) <= 1:
return mylist
mid = len(mylist) // 2
list_left = merge_sort(mylist[:mid])
list_right = merge_sort(mylist[mid:])
return merge(list_left, list_right)
if __name__ == "__main__":
mylist = [12, 33, 199, 0, 54, 33, 11]
result = merge_sort(mylist)
print(f'归并排序后:{result}')
算法效率
时间复杂度:O(nlogn)
归并排序把数组一层层折半分组,长度为 n 的数组,折半层数就是 logn,每一层进行操作的运算量是 n,得出时间复杂度 O(nlogn)。
空间复杂度:O(n)
每次归并操作需要创建额外的新数组,占用空间为 n,但这部分额外空间会随着方法的结束而释放,所以只需要算单次归并操作开辟的空间即可,得出空间复杂度 O(n)。
稳定性:稳定
从算法中从左到右逐一比较,较小的先放入新数组,所以两个值相同的元素,排序后依然保持原先后顺序。
非原地排序
python归并排序 分词_python-归并排序相关推荐
- python 中文分词_python中文分词,使用结巴分词对python进行分词(实例讲解)
在采集 中文分词是中文文本处理的一个基础性工作,结巴分词利用进行中文分词. 其基本实现原理有三点: 1.基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG) ...
- python归并排序 分词_python实现归并排序,归并排序的详细分析
学习归并排序的过程是十分痛苦的.它并不常用,看起来时间复杂度好像是几种排序中最低的,比快排的时间复杂度还要低,但是它的执行速度不是最快的. 很多朋友不理解时间复杂度低为什么运行速度不一定快,这个不清楚 ...
- python递归排序_Python归并排序(递归实现)
为什么归并排序如此有用? 1. 快捷和稳定 归并排序成为⼀一个非常棒的排序算法主要是因为它的快捷和稳 定.它的复杂度即使在最差情况下都是O(n log n).而快速排序 在最差情况下的复杂度是O(n^ ...
- python最大分词_python正向最大匹配分词和逆向最大匹配分词的实例
正向最大匹配 # -*- coding:utf-8 -*- CODEC='utf-8' def u(s, encoding): 'converted other encoding to unicode ...
- python 英语分词_Python英文文本分词(无空格)模块wordninja的使用实例
在NLP中,数据清洗与分词往往是很多工作开始的第一步,大多数工作中只有中文语料数据需要进行分词,现有的分词工具也已经有了很多了,这里就不再多介绍了.英文语料由于其本身存在空格符所以无需跟中文语料同样处 ...
- python统计词频_Python中文分词及词频统计
中文分词 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组.英文使用空格来分开每个单词的,而中文单独一个汉字跟词有时候完全不是同个含义,因此,中文分词相比英文 ...
- python jieba库分词_Python基于jieba库进行简单分词及词云功能实现方法
本文实例讲述了Python基于jieba库进行简单分词及词云功能实现方法.分享给大家供大家参考,具体如下: 目标: 1.导入一个文本文件 2.使用jieba对文本进行分词 3.使用wordcloud包 ...
- python结巴分词实例_python 结巴分词(jieba)详解
"结巴"中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese ...
- python归并算法_python归并算法
python数据结构与算法总结 python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构 ...
- python 两点曲线_Python已经成为排名第一的编程语言!附带最新Python400集视频教学...
同样是学习编程语言,当然要选择目前业内最先进.最热门.将来应用最广泛.最有前景的编程语言.在2017年的编程语言排行榜中,Python排名第一. Python拥有海量的开发库,方便控制各种品牌硬件,快 ...
最新文章
- LeetCode 3Sum
- 最后9个名额丨知识图谱理论与实战(线下集训)
- response细节点
- [Luogu1890]gcd区间
- JTable 失去焦点时取消编辑状态
- android arcgis 绘制圆_arcgis for android 定位 圆
- 火狐浏览器如何设置启动页面
- NBU调用crontab备份
- Java 集合 源码分析+重点解析 超详细学习资料
- c语言日志管理系统 --- zlog
- 笔试题目:升级装备题
- 机械制图计算机类实验报告,机械cad实验报告总结
- 多媒体信息发布系统源码
- ai面试的优缺点_淘汰你的不一定是HR,有可能是AI面试官
- 北航超算运行matlab,北航荣获世界大学生超算总决赛一等奖!超50万亿次,又破世界纪录...
- 有向图和无向图用邻接矩阵储存
- Eclipse的各种查找,类的查找,方法查找快捷键
- H5页面手机端禁止缩放的正确方式
- 动态规划:走楼梯问题——01
- MySQL教程——2 中级篇(索引、视图、存储过程)