目录

一、代码

二、随笔


一、代码

'''
归并排序的主要思路:将两个有序的子列表归并为一个有序的大列表
'''#归并函数,假设li是由左右两个有序的子列表组成,假设两个子列表都是从小到大排好序的列表
def merge(li,low,mid,high):''':param li: 由左右两个有序的子列表组成的大列表:param low: 列表的起始索引:param mid: 两个子列表的分解处的索引,这里取前面子列表的最后一个元素的索引为mid:param high: 大列表最后一个索引:return: 从小到大排序的列表'''# 当列表中有两个元素时进行归并操作i = low # 第一个子列表的起始索引j = mid + 1 # 第二个子列表的起始索引比较好了的元素lTmp = [] # 用于保存while i <= mid and j <= high: # 当两个子列表都没有遍历完时if li[i] > li[j]:lTmp.append(li[j])j += 1else:lTmp.append(li[i])i += 1while i <= mid:# 当右列表访问结束后,直接将左列表进行添加lTmp.append(li[i])i += 1while j <= high:lTmp.append(li[j])j += 1li[low:high+1] = lTmp#归并排序
def mergeSorted(li,low,high):''':param li: 列表:param low: 列表起始索引:param high: 列表结束索引:return: '''if low < high: # 保证列表右两个元素mid = (low + high)//2mergeSorted(li,low,mid) # 对左列表进行排序mergeSorted(li,mid+1,high) # 对右列表进行排序merge(li,low,mid,high) # 将排好序的两个列表进行归并if __name__ == '__main__':import randomli = list(range(20)) # 随机生成20个数random.shuffle(li) # 打乱print(li,"未排序的列表")print("---------------------------------------")mergeSorted(li,0,len(li)-1)print(li,"归并排序后的列表")

[11, 8, 13, 1, 4, 3, 18, 7, 14, 10, 19, 0, 9, 12, 2, 6, 5, 15, 17, 16] 未排序的列表
---------------------------------------
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 归并排序后的列表

二、随笔

【数据结构】——归并排序相关推荐

  1. 数据结构----归并排序

    数据结构----归并排序 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 100 void gui ...

  2. 数据结构 归并排序 C++

    个人对归并排序的理解 1.也是分治法 2.先拆分,拆分总序列, (先不考虑奇数) 第一次拆分为N个子序列, 每个子序列元素有1个,俩俩合并子序列 第二次拆分为N/2子序列,每个子序列元素有2个, 俩俩 ...

  3. python算法与数据结构-归并排序算法

    代码如下所示: # -*-coding=utf-8-*- def merge_sort(alist):"""归并排序"""n = len(a ...

  4. 数据结构——归并排序

    1. 归并排序 分治模型在每层递归时都有三个步骤: 分解原问题为若干子问题,这些子问题是原问题的规模较小的实例: 解决这些子问题,递归地求解各子问题.然而,若子问题的规模足够小,则直接求解: 合并这些 ...

  5. (五) 数据结构 - 归并排序

    归并排序 归并排序是一种基于分而治之的排序技术.最坏情况下的时间复杂度为O(nlogn),它是最受人尊敬的算法之一.归并排序首先将数组分成相等的两半,然后以排序的方式将它们合并. 核心思想 为了理解合 ...

  6. 数据结构---归并排序和外部排序

    内部排序 若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序. 外部排序 若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序. 就地排序 若排序算 ...

  7. 数据结构与算法系列——从菜鸟到入门

    持续更新系列. 参考自:<数据结构与算法分析--Java语言描述>.<算法导论> 排序 数据结构--快速排序 数据结构--堆排序 数据结构--归并排序 数据结构--计数排序 数 ...

  8. Caché 算法与数据结构

    第一章 Caché 算法与数据结构 基础和概念 ☆☆☆☆☆ 第二章 Caché 算法与数据结构 数组原理 ☆☆☆☆☆ 第三章 Caché 算法与数据结构 链表原理 ☆☆☆☆☆ 第四章 Caché 算法 ...

  9. invoke 数组_如何对一个亿的数组进行快速排序

    总结概括: 1.数据结构 归并排序 (也是后续排序 LRD) 2.多线程 ForkJoin框架 繁重任务的并行计算框架,map-reduce思想 计算代码 /****@author dongsheng ...

  10. NOIP2013 提高组复赛解题报告

    NOIP2013 提高组复赛 day1 day\;1 1002. 火柴排队 贪心+数据结构/归并排序 这个"相邻交换"让我联想到了NOIP2012_day1_task2_game那 ...

最新文章

  1. 惊呆了,Spring中竟然有12种定义bean的方法
  2. mysql授权其他用户导出数据_mysql创建账号、授权、数据导出、导入
  3. IJCAI 2021 医药AI必读论文推荐
  4. Akka的字数统计MapReduce
  5. python gif 透明,Python3+试点批量处理简单的GIF到PNG并透明地去除背景色,python3Pillow,gif,转成,png,透明化,去掉...
  6. 分布式系统中,权限设计实践
  7. 厨房炒锅行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  8. 【loj3056】【hnoi2019】多边形
  9. 第七次全国人口普查公报(第三号) ——地区人口情况
  10. 小米5短接点 | 小米红米高通短接9008教程视频教程 | 高通9008驱动下载 | 不拆机怎么直接进9008 | 什么线能直接进9008
  11. python控制51单片机的红绿灯_基于51单片机的交通灯控制设计
  12. ubuntu安装transmission下载BT
  13. 怎样在 Linux 命令行中切换用户
  14. DSL 领域特定语言
  15. python基本运算符号有哪些
  16. 计算机大写改成拼音形式,Excel将汉字名字,转换为大写的拼音,全称
  17. php同子域单点登录,SSO 单点登录总结(PHP)(示例代码)
  18. 什么是MySQL| 什么是数据库 | 数据库详解
  19. Docker启动MySql时Exited (1) 8 seconds ago或者Error response from daemon: Container xx is not running的解决方法
  20. SQL Server 常用关键字

热门文章

  1. 虚拟机VMware里 windows server 2003 扩充C盘方法
  2. 复习--SQL Server (一) -系统数据库
  3. Java初学者入门经典:面向对象的思维方法(其实同样非常适合C#的初学者)……非原创,作者忘了,非常抱歉...
  4. vue图片懒加载插件vue-lazyload
  5. Python学习(三)基础
  6. 洛谷3171 网络吞吐量(网络流)
  7. 斯坦福大学机器学习——高斯判别分析
  8. Web开发模式(MVC设计模式)
  9. MySQL Binlog Mixed模式记录成Row格式
  10. Java中的Error和Exceptiond的异同点