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

归并排序模板

时间:2022-11-22 13:31:22浏览次数:28  
标签:sort 归并 数列 merge int mid ++ 排序 模板


归并排序模板_归并排序

题目

给定你一个长度为n的整数数列。
请你使用归并排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。

输入格式
输入共两行,第- -行包含整数n。
第二行包含n个整数(所有整数均在1~10^9范围内),表示整个数列。

输出格式
输出共一行,包含n个整数,表示排好序的数列。

数据范围
1<n<100000

输入样例:
3 1 2 4 5

输出样例:
1 2 3 4 5

步骤

  1. 确定分界点,​​mid = (1 + r) / 2​
  2. 递归排序left, right
  3. 归并——合二为一 ※

C++

#include <iostream>
using namespace std;

const int N = 1e6 + 10;
int n;
int q[N], tmp[N];

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表示临时数组中有几个数
while (i <= mid && j <= r)
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++]; // same as left
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", &q[i]);
merge_sort(q, 0, n - 1);
for (int i = 0; i < n; i++) printf("%d ", q[i]);
return 0;
}

标签:sort,归并,数列,merge,int,mid,++,排序,模板
From: https://blog.51cto.com/u_13875041/5877873

相关文章

  • 【数组8】数字在排序数组中出现的次数
    题目描述统计一个数字在排序数组中出现的次数。publicclassSolution{publicintGetNumberOfK(int[]array,intk){if(array==null||array.length<=0)......
  • 排序算法(实践篇)
    排序算法(实践篇)插入排序直接插入voidinsert_sort(intq[],intn){ inti,j; for(i=2;i<=n;i++) { if(q[i]<q[i-1])//q[i]<q[i-1]说明要将q[i]插入前面的有......
  • 排序算法(理论篇)
    排序算法(理论篇)插入排序直接插入:时间:O(n2);空间:O(1)比较次数分析最好情况(全正序):n-1次最坏情况(全逆序):n(n-1)/2次一般情况分析举例:对于21,32,46,40的序列从小......
  • 二叉排序树(BST树)
    二叉排序树(BST树)一、介绍二叉排序树:所有叶子结点都要求左子结点比当前结点小,右子结点比当前结点大。优点:查询速度,新增结点速度都会更快。每判断一个结点,都会选择去往......
  • GVIM使用及模板制作
    「教程」GVIM使用及模板制作原创2022-11-2209:26·​​明德扬FPGA科教​​GVIM是类似于记事本的代码编辑工具,但相比于记事本其输入效率更高,可以更好的提升工作效率。由于......
  • 手把手教你如何用界面组件DevExpress WPF应用一个模板主题
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专......
  • 数组部分基础&冒泡排序
    数组基础知识 1.数组的创建格式:变量(数组)类型变量(数组)名=变量(数组)值int[]nums;//声明一个数组nums=newint[10];//创建一个数组int[]nums=new......
  • 冒泡排序法
    voidBubbleSort(ints[],intn){//函数参数:数组与数组大小 inti,j,temp; for(i=0;i<n-1;i++)//从0开始进行n-1轮排序 {......
  • 随机数模板
    #ifndef_RANDOM_#define_RANDOM_#include<iostream>#include<ctime>#include<cstdlib>#include<algorithm>intrandom(intx){//生成一个0到x-1范围......
  • 33. 搜索旋转排序数组
    整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0<=k<nums.length)上进行了 旋转,使数组变为 [nums[k],nums[k+......