归并排序-Python实现
归并排序(MergeSort)
归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)(大O符号)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行
递归法(Top-down)
- 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
- 设定两个指针,最初位置分别为两个已经排序序列的起始位置
- 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
- 重复步骤3直到某一指针到达序列尾
- 将另一序列剩下的所有元素直接复制到合并序列尾
Python实现
- def mergeSort(nums):
- if len(nums) < 2:
- return nums
- mid=len(nums)//2
- left=mergeSort(nums[:mid])
- right=mergeSort(nums[mid:])
- return megre(left,right)
- def megre(left,right):
- result=[]
- i=j=0
- while j<len(left) and i <len(right):
- if left[j] < right[i]:
- result.append(left[j])
- j+=1
- else:
- result.append(right[i])
- i+=1
- if j==len(left):
- for temp in right[i:]:
- result.append(temp)
- else:
- for temp in left[j:]:
- result.append(temp)
- return result
- if __name__ == "__main__":
- nums = [1, 4, 2, 3.6, -1, 0, 25, -34, 8, 9, 1, 0]
- print("original:", nums)
- print("Sorted:", mergeSort(nums))
输出内容:
- C:\Python27\python.exe D:/code-program/lianxi-test/二叉搜索树.py
- ('original:', [1, 4, 2, 3.6, -1, 0, 25, -34, 8, 9, 1, 0])
- ('Sorted:', [-34, -1, 0, 0, 1, 1, 2, 3.6, 4, 8, 9, 25])
- Process finished with exit code 0
c语言版本
- void merge_sort_recursive(int arr[], int reg[], int start, int end) {
- if (start >= end)
- return;
- int len = end - start, mid = (len >> 1) + start;
- int start1 = start, end1 = mid;
- int start2 = mid + 1, end2 = end;
- merge_sort_recursive(arr, reg, start1, end1);
- merge_sort_recursive(arr, reg, start2, end2);
- int k = start;
- while (start1 <= end1 && start2 <= end2)
- reg[k++] = arr[start1] < arr[start2] ? arr[start1++] : arr[start2++];
- while (start1 <= end1)
- reg[k++] = arr[start1++];
- while (start2 <= end2)
- reg[k++] = arr[start2++];
- for (k = start; k <= end; k++)
- arr[k] = reg[k];
- }
- void merge_sort(int arr[], const int len) {
- int reg[len];
- merge_sort_recursive(arr, reg, 0, len - 1);
- }
归并排序-Python实现的更多相关文章
- 归并排序python实现
归并排序python实现 归并排序 归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法 首先是一个例子 原序先通过一半一半的拆分,然后: 然后再一步一步的向上合并,在合并的过 ...
- 归并排序python实现源码
将开发过程经常用到的一些代码片段收藏起来,下面的资料是关于归并排序python实现的代码,应该能对码农们有一些用. def mergesort(arr): if len(arr) == 1: retu ...
- 归并排序(Python)
一.采用分治策略:将原问题划分成n个规模较小的但结构和原问题相同的子问题,递归解决这些子问题后合并各个结果从而得到原问题的解. 二.分治策略的步骤: 分解:将原问题分解成一系列子问题 解决:子问题粒度 ...
- 经典算法之归并排序——python和JS实现
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:韩忠康 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自 ...
- 归并排序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)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列.归并过程:比 ...
随机推荐
- Ansible 远程服务器连接 Internet 测试
Email 连接: lonnyliu@126.com 需求 在使用Ansible过程中不可避免需要了解远端服务器是否能够联通外网,以便进行在线安装软件或者其他.对于运维人员来说普遍的办法有 1. 登录 ...
- 朝阳大妈也能听懂的git教程 (好人不谢)
1 核心概念(非常简单) 分支 同一个树关节 长两个分叉 每一个树关节 就是一个commit commit 是纵向纬度的版本 分支(branch) 是横向纬度的版本 (发挥想象力 自己 ...
- manual for emacs markdown-mode(English)
markdown-mode now requires Emacs 24.3 or later. Markup insertion and replacement keybindings under C ...
- Python定义一个函数
Python函数:实现某种功能的代码段 定义一个函数需要遵循的规则: 1.使用 def 关键字 函数名和( ),括号内可以有形参 匿名函数使用 lambda 关键字定义 2.任何传入参数和自变量必须放 ...
- Python time tzset()方法
描述 Python time tzset() 根据环境变量TZ重新初始化时间相关设置.高佣联盟 www.cgewang.com 标准TZ环境变量格式: std offset [dst [offset ...
- 7.11 NOI模拟赛 graph 生成函数 dp 多项式
LINK:graph HDU题库里的原题 没做过自闭. 考虑dp 设\(f_{i,j}\)表示前i个点构成j个联通块是树的方案数. 对于一次询问答案即为\(\sum_{j}f_{n,j}j^k\) 考 ...
- Linux的VMWare中Centos7文件查找(find-grep)和vim文本编辑器基操
一.find文件查找 grep 匹配字段 文件名 ——筛选文件 find查找 语法参数示例 格式: find 查找范围 查找类型 参数 find / -name *.conf 按文件名查找 ...
- Raft协议理解
raft协议最关键的部分是领导选举和日志复制 日志复制 日志匹配原则:如果两个日志在相同索引位置的entry的任期号相同,那么这两个日志从头到这个索引位置之前完全相同. 日志匹配原则可以解释为如下两条 ...
- TF上架模式是什么?有什么作用?
TF上架模式中的TF上架就是TestFlight上架的意思,意思就是将开发者开发完成的App在苹果官方内测商店TestFlight上架的模式,一般被我们简称为TF上架模式. 为什么要了解TF上架呢?为 ...
- CentOS7系统管理与运维实战
CentOS7系统管理与运维实战 下载地址 https://pan.baidu.com/s/1KFHVI-XjGaLMrh39WuhyCw 扫码下面二维码关注公众号回复100007 获取分享码 本书目 ...