二路归并排序Python实现-II
数组的二路归并排序
今天突然想重新写一下 python 排序归并代码,今天重新整理了一下,命名相对以前更加清晰了,给出了完整的测试用例。
对二路归并的排序之前写的文章,感觉实现不是特别好。
二路归并排序Python实现
from typing import Listimport randomclass Solution:def sort(self, array: List, left: int, right: int):if left < right:mid = left + (right - left) // 2self.sort(array, left, mid)self.sort(array, mid + 1, right)self._merge(array, left, mid, right)def _merge(self, array, left, mid, right):"""在区间 [left,right] 进行merge 操作:param array::param left::param mid::param right::return:"""temp = [None] * (right - left + 1)i = leftj = mid + 1k = 0while i <= mid and j <= right:if array[i] < array[j]:temp[k] = array[i]k += 1i += 1else:temp[k] = array[j]k += 1j += 1while i <= mid:temp[k] = array[i]k += 1i += 1while j <= right:temp[k] = array[j]k += 1j += 1array[left:right + 1] = tempif __name__ == '__main__':cout = 0array = list(range(1000))expected = array.copy()while cout < 1000:random.shuffle(array)r = Solution().sort(array, 0, len(array) - 1)assert array == expectedcout += 1print(f"curent count={cout}")
分享快乐,留住感动. '2020-12-24 13:54:18' --frank
二路归并排序Python实现-II相关推荐
- 二路归并排序Python实现-III
二路归并排序Python实现-III 归并排序 是一种 效率比较高并且稳定的算法.时间复杂度 O(NLog(N)),空间复杂度 O(N). 归并排序(Merge Sort)是建立在归并操作上的一种有效 ...
- 二路归并排序——python
from __future__ import print_functiondef merge_sort(collection):"""二路归并排序(稳定排序),结果升序算 ...
- 数据结构源码笔记(C语言):二路归并排序
//实现二路归并排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20 //线性表中最多元素个数typedef int ...
- 归并排序python实现
归并排序python实现 归并排序 归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法 首先是一个例子 原序先通过一半一半的拆分,然后: 然后再一步一步的向上合并,在合并的过 ...
- 二路归并排序简介及其并行化
1.归并排序简介 1.1算法思想 归并排序属于比较类非线性时间排序,比较类排序中性能最佳,应用较为广泛. 归并排序是分治法(Divide and Conquer)的一个典型的应用.将已有序的子序列合并 ...
- C++实现二路归并排序算法
排序算法分为五大类,一共是有九种,如下: 插入类:直接插入排序.折半插入排序.希尔排序 交换类:冒泡排序.快速排序 选择类:简单选择排序.堆排序 归并类:二路归并排序 基数类:多关键字排序 九种算法的 ...
- 二路归并排序原理及JAVA实现
归并类排序 基本思想:首先将原始无序序列划分为两个子序列,然后分别对每个子序列递归地进行排序,最后再将有序子序列合并. 归并排序基于分治策略思想.前面提到的基于分治的快速排序重在"分&quo ...
- 二路归并排序及时间复杂度分析
序言 二路归并排序是一种效率极高的递归排序,将数组A化为有序数组时间复杂度为O(nlogn). 思想 二路归并排序分为拆分数组以及合并两个操作. 切分(自上而下)时间复杂度2*T(n/2) 每次从数组 ...
- 数据结构——二路归并排序和基数排序
二路归并排序 算法原理 假设该数组为q,左边界为 l,右边界为 r,并设置临时数组tmp. 采用分治思想: 第一步:确定分界点: mid = l + r >>1. 第二步:递归划分左右两段 ...
- Sort List(二路归并排序)
题目链接:https://leetcode.com/problems/sort-list/description/ 题目要求:对链表进行排序,时间复杂度O(n),常数的空间复杂度 两种解法,本质上都是 ...
最新文章
- 手把手教你搭建 ELK 实时日志分析平台
- 云信“欢乐颂活动”中奖名单
- 139. Word Break 单词拆分
- 我就是TMD很无聊的女生怎么样。
- Python print和pprint两者的区别
- 卡巴斯基发现ATM病毒Skimmer改进版
- Windows Server AppFabric 简介
- 【转载】为什么用交叉线而不是直通线连接相同的设备
- 天涯上令人肝肠寸断的100个签名!
- Oracle和MySQL新增只有查询权限用户
- 【源码】广义逻辑分布(GLO)库
- 云服务器哪家好?阿里云国际版还是华为云国际版?
- 基于qiankun.js的微前端应用实战
- Python 设计模式 - 建造者模式
- 小游戏如何带动直播平台发展?
- 部署k8s时ssh端口不是22导致创建ssh session failed问题
- 什么是主从复制?mysql主从复制?redis主从复制?
- settext 下划线_Android TextView 添加下划线的几种方式
- 复杂背景下的自动驾驶目标检测数据集
- 基于深度指标的网络脆弱性攻击代价定量评估方法