python归并排序算法实现_排序算法之归并排序(附 Python 与 JS 实现)
文章同步发布于博客
从头开始复习算法有一段时间了,有输入也要有输出。除了交编程作业以外,也要整理自己的笔记。
归并排序,使用分治的思想,将原问题折半分解为子问题,再使用同样的算法解决子问题。
总体思路
如果数组长度为 1,就返回该数组。
如果不是 1,则将数组折半,对每一半执行归并排序,将排好序的数组存在两个变量里。
之后,通过归并算法将两个数组拼合成一个排好序的数组。
返回该排好序的数组。
递归过程中,数组会被逐层拆分,直到每一个子问题都变为长度为一的数组,此时,每一个子问题的数组都是排好序的了(因为就一个元素),就会触发拼合操作。
将两个已排好序的数组拼合的过程如下:
创建一个长度为两数组长度之和的空数组。
比较两个数组的头元素,将小的那个移至新数组非空部分的末尾。循环执行直至其中一个数组的元素全部被挪走。
将剩余的部分按序挪至新数组的末尾。
这样就得到了一个合并之后的排好序的数组。
再逐层递归执行合并操作,直到最后将原数组排好序。
伪代码:
MergeSort(A[1...n])
if n == 1:
return A
m = floor(n/2)
B = MergeSort(A[0...m])
C = MergeSort(A[m+1...n])
A' = Merge(B, C)
return A'
Merge(B[1...p], C[1...q])
// B and C are sorted
D = empty array of size p+q
while B and C are both not empty:
b = B[0]
c = C[0]
if b <= c:
move b to the end of D
else:
move c to the end of D
// after the while loop, one of the two array is now empty
move the rest of B or C to the end of D
return D
复制代码
Python 3 实现:
可以存储至本地文件然后运行查看结果
def MergeSort(A):
if len(A) == 1:
return A
m = len(A) // 2
B = MergeSort(A[0:m])
C = MergeSort(A[m:len(A)])
A_new = Merge(B, C)
return A_new
def Merge(B, C):
D = [None] * (len(B)+len(C))
i = 0
j = 0
while i < len(B) and j < len(C):
b = B[i]
c = C[j]
if b <= c:
D[i+j] = b
i += 1
else:
D[i+j] = c
j += 1
while i < len(B):
D[i+j] = B[i]
i += 1
while j < len(C):
D[i+j] = C[j]
j += 1
return D
if __name__ == '__main__':
a = [1, 3, 7, 2, 9, 6, 8, 10, 1, 2, 5]
sorted_A = MergeSort(a)
print(sorted_A)
复制代码
JavaScript 实现
同样可以保存文件,然后通过 node 命令运行
function mergeSort(array){
if (array.length === 1)
return array
let m = Math.floor(array.length / 2)
let B = mergeSort(array.slice(0, m))
let C = mergeSort(array.slice(m, array.length))
let A_sorted = merge(B, C)
return A_sorted;
}
function merge(B, C){
let i = 0
let j = 0
let D = []
while(i < B.length && j < C.length){
if (B[i] <= C[j]){
D.push(B[i++])
} else {
D.push(C[j++])
}
}
while (i < B.length) D.push(B[i++])
while (j < C.length) D.push(C[j++])
return D
}
let a = mergeSort([1, 4, 2, 8, 345, 123, 43, 32, 5643, 63, 123, 43, 2, 55, 1, 234, 92]);
console.log(a)
复制代码
python归并排序算法实现_排序算法之归并排序(附 Python 与 JS 实现)相关推荐
- java 快速排序算法简单_排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序......
先推荐一篇关于排序算法的文章:http://www.cppblog.com/guogangj/archive/2009/11/13/100876.html 本文思路部分来源于上篇文章,但测得的结果似乎 ...
- java排序算法总结_排序算法总结及Java实现
1. 整体介绍 分类 排序大的分类可以分为两种,内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.主要需要理解的都是内排序算法: 内排序可以分为 ...
- java排序算法原理_排序算法原理与实现(java)
排序算法原理与实现(java) Java程序员必知的8大排序 [来源:本站 | 日期:2012年12月24日 | 浏览173 次] 字体:[大 中 小] 8种排序之间的关系: 1, 直接插入排序 (1 ...
- python排序算法实现_排序算法整理(Python实现)
1. 冒泡排序 冒泡排序(Bubble Sort)是稳定排序,其基本思想是:遍历待排序列,依次两两比较,如果顺序错误就交换.如果从头开始遍历,把较大的交换到后面,结果就是越大的数据越往下沉,所以也可以 ...
- 结合内存分析java归并排序_排序算法之归并排序(Mergesort)解析
一.归并排序的优缺点(pros and cons) 耗费心思来理解它,总要有个理由吧:归并排序的效率达到了巅峰:时间复杂度为O(nlogn),这是基于比较的排序算法所能达到的最高境界 归并排序是一种稳 ...
- 利用Python实现十大经典排序算法(附代码流程)
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:hustcc 来源:https://github.com/hustcc/JS ...
- 排序中减治法算法伪代码_【算法与数据结构】伪代码与流程图
js难的是抽象概念 编程语言也能抽象 JS Python java PHP 根本就没区别 这些语言都有 声名 if...else while 循环 for 循环 函数 对象 这意味着 你没有必要过分关 ...
- python高阶函数——sorted排序算法
python高阶函数--sorted排序算法 python 内置的sorted()函数可以对一个list进行排序: >>> sorted([8,3,8,11,-2]) [-2, 3, ...
- Python:实现gnome sortt侏儒排序算法(附完整源码)
Python:实现gnome sortt侏儒排序算法 def gnome_sort(lst: list) -> list:if len(lst) <= 1:return lsti = 1w ...
- Python:实现natural sort自然排序算法(附完整源码)
Python:实现natural sort自然排序算法 from __future__ import annotationsimport re msd radix sortdef natural_so ...
最新文章
- 1102示波器使用方法_你知道示波器的探头是怎样工作的吗?示波器探头的使用方法...
- 在线教育后端开发项目总结
- 信安精品课:第7章访问控制技术原理与应用精讲笔记
- 为什么不邀请我参加会议?
- 理论 | 六种延迟队列的实现方案
- oracle到pg不停机增量迁移,研究 Oracle 到 PostgreSQL 的数据迁移 – 以 pgloader 为例 – Phy 的博客...
- 绝地仙王986服务器维护到几点,绝世仙王————【维护】1月12日更新维护公告...
- day4(继承、修饰符、方法的重写、super关键词、继承中的构造方法、object类、对象转型)...
- jquery $.post 超时_详解如何实现前端jquery中的ajax方法,看这一篇就够了
- 利用ES4封装Windows10
- Frobenius自同构
- 同是匿名社交,国内外“秘密”大不同
- 微信视频号视频怎么下载保存到手机相册?
- 笔记本外接显示器没有声音
- 高性能信号发生器介绍
- Windows C盘清理方法
- Java线程池(超详细)
- linux系统盘的概念,了解linux系统硬盘分区概念-SELinux入门-linux网卡配置及参数学习_169IT.COM...
- python机器学习基础05——sklearn之逻辑回归+分类评价指标
- python做统计分析_用Python做数据分析,Numpy,Pandas,matp
热门文章
- 各位玩新浪的SAE的 请点个关注http://weibo.com/i/2062352633
- YII 学习笔记(2)(未完)
- python访问服务器注册表,使用Python的Windows注册表访问(Winreg)
- mysql悲观锁和乐观使用实例_MySQL 悲观锁和乐观锁
- char **p作为参数被修改_opencv第1课-加载、修改、保存图像
- hadoop api 复制文件_Hadoop核心架构是怎样的?
- JavaSE基础篇之-Java 流(Stream)、文件(File)和IO
- Java多态的理解,真实开发详解,带编程,通俗白话文,简单易懂
- Java 后端MD5加密
- java实现水仙花数int_java实现水仙花数的计算|chu