【数据结构】——归并排序
目录
一、代码
二、随笔
一、代码
'''
归并排序的主要思路:将两个有序的子列表归并为一个有序的大列表
'''#归并函数,假设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] 归并排序后的列表
二、随笔
【数据结构】——归并排序相关推荐
- 数据结构----归并排序
数据结构----归并排序 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 100 void gui ...
- 数据结构 归并排序 C++
个人对归并排序的理解 1.也是分治法 2.先拆分,拆分总序列, (先不考虑奇数) 第一次拆分为N个子序列, 每个子序列元素有1个,俩俩合并子序列 第二次拆分为N/2子序列,每个子序列元素有2个, 俩俩 ...
- python算法与数据结构-归并排序算法
代码如下所示: # -*-coding=utf-8-*- def merge_sort(alist):"""归并排序"""n = len(a ...
- 数据结构——归并排序
1. 归并排序 分治模型在每层递归时都有三个步骤: 分解原问题为若干子问题,这些子问题是原问题的规模较小的实例: 解决这些子问题,递归地求解各子问题.然而,若子问题的规模足够小,则直接求解: 合并这些 ...
- (五) 数据结构 - 归并排序
归并排序 归并排序是一种基于分而治之的排序技术.最坏情况下的时间复杂度为O(nlogn),它是最受人尊敬的算法之一.归并排序首先将数组分成相等的两半,然后以排序的方式将它们合并. 核心思想 为了理解合 ...
- 数据结构---归并排序和外部排序
内部排序 若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序. 外部排序 若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序. 就地排序 若排序算 ...
- 数据结构与算法系列——从菜鸟到入门
持续更新系列. 参考自:<数据结构与算法分析--Java语言描述>.<算法导论> 排序 数据结构--快速排序 数据结构--堆排序 数据结构--归并排序 数据结构--计数排序 数 ...
- Caché 算法与数据结构
第一章 Caché 算法与数据结构 基础和概念 ☆☆☆☆☆ 第二章 Caché 算法与数据结构 数组原理 ☆☆☆☆☆ 第三章 Caché 算法与数据结构 链表原理 ☆☆☆☆☆ 第四章 Caché 算法 ...
- invoke 数组_如何对一个亿的数组进行快速排序
总结概括: 1.数据结构 归并排序 (也是后续排序 LRD) 2.多线程 ForkJoin框架 繁重任务的并行计算框架,map-reduce思想 计算代码 /****@author dongsheng ...
- NOIP2013 提高组复赛解题报告
NOIP2013 提高组复赛 day1 day\;1 1002. 火柴排队 贪心+数据结构/归并排序 这个"相邻交换"让我联想到了NOIP2012_day1_task2_game那 ...
最新文章
- 惊呆了,Spring中竟然有12种定义bean的方法
- mysql授权其他用户导出数据_mysql创建账号、授权、数据导出、导入
- IJCAI 2021 医药AI必读论文推荐
- Akka的字数统计MapReduce
- python gif 透明,Python3+试点批量处理简单的GIF到PNG并透明地去除背景色,python3Pillow,gif,转成,png,透明化,去掉...
- 分布式系统中,权限设计实践
- 厨房炒锅行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 【loj3056】【hnoi2019】多边形
- 第七次全国人口普查公报(第三号) ——地区人口情况
- 小米5短接点 | 小米红米高通短接9008教程视频教程 | 高通9008驱动下载 | 不拆机怎么直接进9008 | 什么线能直接进9008
- python控制51单片机的红绿灯_基于51单片机的交通灯控制设计
- ubuntu安装transmission下载BT
- 怎样在 Linux 命令行中切换用户
- DSL 领域特定语言
- python基本运算符号有哪些
- 计算机大写改成拼音形式,Excel将汉字名字,转换为大写的拼音,全称
- php同子域单点登录,SSO 单点登录总结(PHP)(示例代码)
- 什么是MySQL| 什么是数据库 | 数据库详解
- Docker启动MySql时Exited (1) 8 seconds ago或者Error response from daemon: Container xx is not running的解决方法
- SQL Server 常用关键字
热门文章
- 虚拟机VMware里 windows server 2003 扩充C盘方法
- 复习--SQL Server (一) -系统数据库
- Java初学者入门经典:面向对象的思维方法(其实同样非常适合C#的初学者)……非原创,作者忘了,非常抱歉...
- vue图片懒加载插件vue-lazyload
- Python学习(三)基础
- 洛谷3171 网络吞吐量(网络流)
- 斯坦福大学机器学习——高斯判别分析
- Web开发模式(MVC设计模式)
- MySQL Binlog Mixed模式记录成Row格式
- Java中的Error和Exceptiond的异同点