数组的二路归并排序

今天突然想重新写一下 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相关推荐

  1. 二路归并排序Python实现-III

    二路归并排序Python实现-III 归并排序 是一种 效率比较高并且稳定的算法.时间复杂度 O(NLog(N)),空间复杂度 O(N). 归并排序(Merge Sort)是建立在归并操作上的一种有效 ...

  2. 二路归并排序——python

    from __future__ import print_functiondef merge_sort(collection):"""二路归并排序(稳定排序),结果升序算 ...

  3. 数据结构源码笔记(C语言):二路归并排序

    //实现二路归并排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20 //线性表中最多元素个数typedef int ...

  4. 归并排序python实现

    归并排序python实现 归并排序 归并排序在于把序列拆分再合并起来,使用分治法来实现,这就意味这要构造递归算法 首先是一个例子 原序先通过一半一半的拆分,然后: 然后再一步一步的向上合并,在合并的过 ...

  5. 二路归并排序简介及其并行化

    1.归并排序简介 1.1算法思想 归并排序属于比较类非线性时间排序,比较类排序中性能最佳,应用较为广泛. 归并排序是分治法(Divide and Conquer)的一个典型的应用.将已有序的子序列合并 ...

  6. C++实现二路归并排序算法

    排序算法分为五大类,一共是有九种,如下: 插入类:直接插入排序.折半插入排序.希尔排序 交换类:冒泡排序.快速排序 选择类:简单选择排序.堆排序 归并类:二路归并排序 基数类:多关键字排序 九种算法的 ...

  7. 二路归并排序原理及JAVA实现

    归并类排序 基本思想:首先将原始无序序列划分为两个子序列,然后分别对每个子序列递归地进行排序,最后再将有序子序列合并. 归并排序基于分治策略思想.前面提到的基于分治的快速排序重在"分&quo ...

  8. 二路归并排序及时间复杂度分析

    序言 二路归并排序是一种效率极高的递归排序,将数组A化为有序数组时间复杂度为O(nlogn). 思想 二路归并排序分为拆分数组以及合并两个操作. 切分(自上而下)时间复杂度2*T(n/2) 每次从数组 ...

  9. 数据结构——二路归并排序和基数排序

    二路归并排序 算法原理 假设该数组为q,左边界为 l,右边界为 r,并设置临时数组tmp. 采用分治思想: 第一步:确定分界点: mid = l + r >>1. 第二步:递归划分左右两段 ...

  10. Sort List(二路归并排序)

    题目链接:https://leetcode.com/problems/sort-list/description/ 题目要求:对链表进行排序,时间复杂度O(n),常数的空间复杂度 两种解法,本质上都是 ...

最新文章

  1. 手把手教你搭建 ELK 实时日志分析平台
  2. 云信“欢乐颂活动”中奖名单
  3. 139. Word Break 单词拆分
  4. 我就是TMD很无聊的女生怎么样。
  5. Python print和pprint两者的区别
  6. 卡巴斯基发现ATM病毒Skimmer改进版
  7. Windows Server AppFabric 简介
  8. 【转载】为什么用交叉线而不是直通线连接相同的设备
  9. 天涯上令人肝肠寸断的100个签名!
  10. Oracle和MySQL新增只有查询权限用户
  11. 【源码】广义逻辑分布(GLO)库
  12. 云服务器哪家好?阿里云国际版还是华为云国际版?
  13. 基于qiankun.js的微前端应用实战
  14. Python 设计模式 - 建造者模式
  15. 小游戏如何带动直播平台发展?
  16. 部署k8s时ssh端口不是22导致创建ssh session failed问题
  17. 什么是主从复制?mysql主从复制?redis主从复制?
  18. settext 下划线_Android TextView 添加下划线的几种方式
  19. 复杂背景下的自动驾驶目标检测数据集
  20. 基于深度指标的网络脆弱性攻击代价定量评估方法

热门文章

  1. Java性能优化之for循环
  2. 浏览器cookie被禁掉,该如何去解决
  3. 维修电工电气控制技能实训考核装置
  4. 文字转语音软件真人发声(声音自然有感情)
  5. 赖世雄英语学习三原则
  6. 90后游戏开发毛星云跳楼自杀,8年执着国产3A梦碎
  7. 《精通linux设备驱动程序开发》——USB
  8. html扫雷源码js,js实现扫雷源代码.pdf
  9. 盘点电机重要应用的七大领域
  10. 【时事摘抄】(原创)既然故宫领导对错误一慨不知,认神马错?