首页 > 其他分享 >归并排序模板

归并排序模板

时间:2022-11-29 19:22:49浏览次数:32  
标签:sort 归并 int mid merge 排序 模板

归并排序模板

归并排序要点:
分治的思想

  1. 确定分界点 mid = (l + r)/2;
  2. 递归排序left,right
  3. 归并——合二为一(归并排序的核心)
#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;
int a[N], tmp[N];  //tmp[]结果数组 

void merge_sort(int q[], int l, int r){
	if(l >= r) return;   //递归终止条件,区间元素个数没有或只有一个 
	
	int mid = l + r >> 1;  //确定分界点 
	
	merge_sort(q, l, mid), merge_sort(q, mid + 1, r);  //递归处理左右两段 
	
	//归并 
	int k = 0, i = l, j = mid + 1;  //k:指合并了几个数 i: 指向左半边的起点,j:指向右半边的起点 
	while(i <= mid && j <= r){   	//i小于左半边边界,j小于右半边边界 
		if(q[i] <= q[j]) tmp[k++] = q[i++];
		else tmp[k++] = q[j++];
	}	
	while(i <= mid) tmp[k++] = q[i++];  //左半边没循环完 
	while(j <= r) tmp[k++] = q[j++];    //右半边没循环完 
	
	for(int i = l, j = 0; i <= r; i++, j++) q[i] = tmp[j];  //结果赋值回q[]里 
}


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

标签:sort,归并,int,mid,merge,排序,模板
From: https://www.cnblogs.com/csai-H/p/16936436.html

相关文章

  • 拓扑排序 专题
    拓扑排序(\(Topological\)\(sorting\))拓扑排序指的是有向无环图(\(DAG\));学过计算机网络的知道计算机网络中有一个拓扑结构;下面就是一个拓扑结构;那拓扑序就是,图中任意一......
  • WPF控件模板(6)
    什么是ControlTemplate?ControlTemplate(控件模板)不仅是用于来定义控件的外观、样式,还可通过控件模板的触发器(ControlTemplate.Triggers)修改控件的行为、响应动画等......
  • Sequelize排序问题: 关联其他表数据的排序实现
    问题描述:有一对多或者多对多的关联表数据要一起提取返回前端时,在没有申明排序规则的情况下,关联的数据的顺序是随机的。在前端多次调用这类接口,会发现,页面展示的关联数据的......
  • 排序实练(1):列表排序-插入法及排序基础认知
    1.1插入法排序:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——​​插入排序法​......
  • 排序实练(2):列表排序-冒泡法/选择排序/快速排序
    ​​排序算法有很多,包括​​​​插入排序​​​,​​堆排序​​​,​​归并排序​​​,​​选择排序​​​,​​计数排序​​​,​​基数排序​​​,​​桶排序​​​,​​快速排序......
  • C++——多层嵌套模板类的静态成员变量的声明与定义方式
    在C++类的设计中,静态成员变量必须在类中声明,在类外定义,对于模板类亦是如此。如果只是单层级的模板类,其声明方式参考如下代码:template<typenameupid_t>classparent......
  • acwing113. 特殊排序
    记录交互题这个东西 classSolution{public:vector<int>specialSort(intN){vector<int>res;res.push_back(1);for(inti=2;i<......
  • Discuz模板制作视频教程
    资源简介discuz的模板也是可以自己制作的,想让你的网站更好看,更适合你的论坛主题,那就来学习一下怎么做模板吧。discuz模板制作视频教程,只需要简单的9节课,就能轻松教会大家......
  • 5.2.5 快速排序——代码解说
    需思考一个巧妙的办法,在这个数组里头,原地进行这个数组元素倒换,实现参照元素在它该到达的位置去存放,左边的元素都比它小,右边的元素都比它大,不分配动态数组。保证整体左边小,......
  • 5.2.1 归并排序——总体思路
    折半查找快速是因为每次只查一半,另一半不管把一个任务拆成两个部分只完成其中一部分,是一个很有效的办法当元素多了,运算、时间消耗等会比较复杂数组前一半让它有序,后一半......