首页 > 其他分享 >「学习笔记」归并排序

「学习笔记」归并排序

时间:2023-08-20 15:23:01浏览次数:29  
标签:sort 归并 int mid 笔记 板块 排序

关于归并排序,百度百科是这样定义的:

归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

通过这句话我们可以了解,归排是通过分治实现的。
举个例子:给定了一个数列 \(a\) ,让我们排序:

龟牌的话,就要先一直二分,直到分到最小的板块:

然后就到达了合并的环节,实现方式就是利用另一个数组去表示两个小版块合并成的大板块,用三个指针,\(p,p1,p2\) 分别指向大板块,左边的小板块和右边的小板块的第一个元素,判断左右两个小板块的大小,将较小的元素放入大板块,然后将较小元素的板块和大板块的指针右移,依次类推即可实现。

以上面的排列为例:

因为 4 比 5 要小,所以将 4 先存入大板块的 \(p\) 位置,然后 4 的板块没元素了,于是将 5 放入。


多个元素的话也是同样的道理,用指针一个一个枚举即可:

步骤 1:

步骤 2:

步骤 3:

步骤 4:

最后一直合并到完整的排列就结束了,这就是归并排序的分治思想和模拟实现。

代码实现:
int n, ans;

int a[20], b[20];

void sort(int now[], int temp[], int s, int e) {
	if (s == e) return;
	int mid = (s + e) >> 1;
	sort(now, temp, s, mid), sort(now, temp, mid + 1, e);
	int x = s, y = mid + 1, z = s;
	while (x <= mid && y <= e)
		if (now[x] <= now[y]) temp[z++] = now[x++];
		else temp[z++] = now[y++];
	while (x <= mid) 
		temp[z++] = now[x++];
	while (y <= e)
		temp[z++] = now[y++];
	for (x = s; x <= e; x++)
		now[x] = temp[x];
}

int main() {
	cin >> n;
	for (int i = 1; i <= n; i++)
		cin >> a[i];
	sort(a, b, 1, n);
	for (int i = 1; i <= n; i++)
		cout << a[i] << ' ';
	return 0;
}

归并排序还可以用于求逆序对的问题,可以根据龟牌的思想来想一下这道题怎么做
链接

标签:sort,归并,int,mid,笔记,板块,排序
From: https://www.cnblogs.com/Aewrxuk/p/17644031.html

相关文章

  • 将三个组排序
    给定数组只含1、2、3三种数每次操作可以将一个数进行修改将数组修改成非递减顺序的最少次数1.暴力(笨比做法)枚举三种类型数分割的界限classSolution{public:intminimumOperations(vector<int>&nums){intres=INT_MAX;intn=nums.size();......
  • Java学习笔记(十五)
    第九章 多线程9.1 多线程这里只是讲一下多线程基础,后面Java高级会讲juc、多线程高级等1、什么是多线程?同一个程序同时做多个事情。程序:为了完成某个任务,功能,而选择一种编程语言(例如:Java)编写的一组指令的集合。进程:当程序启动时,操作系统会给这个程序分配一块独立的内存空间,以及......
  • 蓝桥杯Web笔记
    一、node.js1、概念(1)Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境,不是一门语言,也不是一个框架、库,而是一个JavaScript的运行环境。让JavaScript脱离了浏览器,能够允许开发人员在浏览器之外编写命令行工具和服务器端脚本例如:我们常关注的浏览器的兼容性,PC端和手机......
  • FEMU模拟器学习笔记
     QEMU参数解析  QEMU的main函数进来后,首先要进行参数解析。一个启动模拟器的命令行如下:x86_64-softmmu/qemu-system-x86_64-name"FEMU-ZNSSD-VM"-enable-kvm-cpuhost-smp2-m4G-devicevirtio-scsi-pci,id=scsi0-devicescsi-hd,drive=hd0-drivefile=/home......
  • 【刷题笔记】26. Remove Duplicates from Sorted Array
    题目Givenasortedarraynums,removetheduplicatesin-placesuchthateachelementappearonlyonceandreturnthenewlength.Donotallocateextraspaceforanotherarray,youmustdothisbymodifyingtheinputarrayin-placewithO(1)extramemory.E......
  • 贪心,构造学习笔记
    贪心构造不会黄题绿题懵逼横批:依托答辩\(\text{CF1764C}\)题目描述有一些点,每一个点有一个点权\(a_i\)。你可以在任意点之间连边,最终的图需要满足不存在\(a,b,c\)满足\(a_a\leqslanta_b\leqslanta_c\)并且\(ab,bc\)之间有连边。思路点拨我们连出来的图一定可以......
  • 考研数据结构——每日一题[希尔排序]
    shell_sort希尔排序//每组内的下标是等差数列//c++中的sort是快排+插排【当排序到<28时改为插入排序】voidshell_sort()//希尔排序【分组的插入排序】不稳定(间隔d的分为一组){for(intd=n/3;d;d=d==2?1:d/3)//特判2,等于2就用1,(最后要用1,而2时d/3=......
  • 基于Springboot学生读书笔记共享
    本文主要论述了如何使用JAVA语言开发一个读书笔记共享平台,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计......
  • openGauss学习笔记-45 openGauss 高级数据管理-物化视图
    openGauss学习笔记-45openGauss高级数据管理-物化视图物化视图是相对普通视图而言的。普通视图是虚拟表,而物化视图实际上就是存储SQL执行语句的结果,可以直接使用数据而不用重复执行查询语句,从而提升性能。按照刷新方式物化视图分为两种:全量物化视图:仅支持对已创建的物化视图......
  • 读发布!设计与部署稳定的分布式系统(第2版)笔记33_混沌工程
    1. 康威定律1.1. 梅尔文·康威1.1.1. MelvinConway1.1.2. 1968年1.1.3. 在设计系统时,组织受制于其自身的沟通结构,这使得它设计的系统结构与沟通结构相一致。1.1.3.1. 社会学现象1.2. 要在系统内部或系统之间构建接口,两个人必须以某种方式沟通有关该接口的规范1.2.......