首页 > 其他分享 >1.2归并

1.2归并

时间:2024-04-02 13:00:59浏览次数:11  
标签:归并 顺序 1.2 int mid 快排 单元

解释都写在代码注释里了,请配合代码一起食用。 

其实就是把原来的数列从中间砍成两部分,然后再四份、八份、十六份...直到不能分为止。然后重排两个最小单元的顺序,排好序后再把小单元合并成中等单元,重排两个中等单元的顺序,排好序好再合并成大单元,重排两个大单元的顺序...以此类推,是为归并排序。

#include<iostream>
using namespace std;
const int N=1e6+10;

int n=0;
int a[N]={0},tmp[N]={0};

void merge_sort(int q[],int l,int r){
	if(l>=r) return; //l在r后面,结束 
	int mid = l+r>>1;//(l+r)/2的意思
	merge_sort(q,l,mid);merge_sort(q,mid+1,r);//与快排不同,归并是先内嵌调用再调整顺序
	
	int k=0,i=l,j=mid+1;//i是第一部分的开头,j是第二部分的开头
	while(i<=mid && j<=r) //i、j都没走到自己那部分的结尾
		if(q[i]<=q[j]) tmp[k++]=q[i++];
		else tmp[k++]=q[j++]; //两部分的开头比较,哪个小把哪个放tmp数组里,然后指针后移
	//当两部分中的某一部分全部放入tmp后 
	while(i<=mid) tmp[k++]=q[i++];//i所在的部分有剩余则全部放到tmp末尾 
	while(j<=r) tmp[k++]=q[j++]; //j所在的部分有剩余则全部放到tmp末尾 
	
	for(i=l,j=0;i<=r;i++,j++) q[i]=tmp[j];	 
}

int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++) scanf("%d",&a[i]);
	merge_sort(a,0,n-1);
	for(int i=0;i<n;i++) printf("%d ",a[i]);
	return 0;
}

与快排不同,快排是先整体调整顺序(不是最终顺序)后再分成两份、四份、八份...来逐步微调,即从整体到局部的顺序调整。而归并是先把整体分解然后再调整,再合并,是从局部到整体的调整顺序。

标签:归并,顺序,1.2,int,mid,快排,单元
From: https://blog.csdn.net/weixin_61747496/article/details/137104504

相关文章

  • 31.2k star, 免费开源的白板绘图工具 tldraw
    31.2kstar,免费开源的白板绘图工具tldraw分类 开源分享项目名:tldraw--无限画布白板Github开源地址: https://github.com/tldraw/tldraw在线测试地址: tldraw文档地址: tldrawSDKtldraw是一款开源免费的无限画布白板,可以在线的实时协作,用户能够创建简单的图形......
  • 23--归并排序
     算法描述:就是将两个有序的合并为一个较大的有序的,直到完全有序为止,也称为2路归并。其时间复杂度是,空间复杂度是,并且稳定。代码如下:#include<stdio.h>#include<malloc.h>#include<assert.h>//一趟归并(自己使用,用static),一趟归并的时间复杂度为O(n)//gap:归并段的长度......
  • FL Studio21.2.3官方中文汉化版无需破解激活
    FLStudio21.2中文版的适用人群非常广泛,主要包括以下几类:FLStudio21Win-安装包下载如下:https://wm.makeding.com/iclk/?zoneid=55981FLStudio21Mac-安装包下载如下:https://wm.makeding.com/iclk/?zoneid=55982音乐制作人:无论是专业的音乐制作人,还是音乐创作爱好者......
  • 男朋友在飞书被裁了,去年刚贷款在上海买了房子,每月房贷+房租就要1.2w,怎么办?
    作者|周天编辑|豆奶“飞书裁人”的消息传开后,很多社交平台的朋友都在讨论。毕竟在当下特殊时期,找工作不易,但裁人更难。更何况是大厂字节的飞书,这下很多人都悬了心。在社交媒体上,有不少网友已经在讨论这件事了。有的人才入职两个月,就已经接到通知了;有的人生怕被选中,正处于......
  • 第1.2节:补语的作用和运用
    ps.(以下内容改编《语法俱乐部》) 上节说到包括be动词在内的解释为“是”的动词没有叙述能力,只能把主语和后面构成叙述的部分连接,所以又叫“连缀动词”。而这种动词后面的句子叫做“补语”。 需要补语的动词有哪些? be动词是最有代表性的“连缀动词”(也叫“系动词”)。凡......
  • 数据结构:归并排序
    归并排序时间复杂度O(N*logN)如果两个序列有序,通过归并,可以让两个序列合并后也有序,变成一个有序的新数组对于一个数组,如果他的左右区间都有序,就可以进行归并了归并的方法将数组的左右两个有序区间比较,每次都取出一个最小的,然后放入临时数组(不能在原数组上修改,因......
  • 基于containerd 部署 kubernetes 1.28集群
    1、准备说明8台Linux主机,安装Ubuntu20.04系统,其中2台haproxy,3台master节点,3台work节点每台主机不低于2GB内存大小,CPU大于2核心集群中的所有主机网络互通节点中不能存在重复的主机名、mac地址或者product_uuid交换分区配置。kubelet默认是在节点上检测到交换分区时,无法启动......
  • 【算法】归并排序(递归法)
    目录归并排序简介算法步骤(递归)C语言实现归并排序简介归并排序(mergesort)是一种高效、通用且基于比较的排序算法。由约翰·冯·诺依曼(JohnvonNeumann)于1945年发明,是一种分治算法(divide-and-conqueralgorithm)。时间复杂度为O(nlog⁡n)O{\left(n\log......
  • Centos7.5+k8s 1.25.0 部署手册
    目录Centos7.5+k8s1.25.0部署手册一、系统准备升级内核!!!1.环境信息(采用2个master节点+3个node节点),操作系统均为Centos7.52./etc/hosts文件修改3.关闭swap4.关闭防火墙5.关闭selinux6.更改yum源为阿里云7.配置所需依赖8.配置免密登录(master上执行,可省)9.配置主机名10.配......
  • `load_boston` has been removed from scikit-learn since version 1.2.问题的解决
    问题描述应该是scikit-learn版本的问题,导致boston这个东西不能在这里使用,就出现这个错误;问题解决我们先将****换成这些(已经在报错里面明确给出来了):data_url="http://lib.stat.cmu.edu/datasets/boston"raw_df=pd.read_csv(data_url,sep="\s+",skiprows=22,header=None......