首页 > 其他分享 >merge_sort

merge_sort

时间:2023-08-01 20:33:20浏览次数:29  
标签:sort temp int mid merge 排序

主要思想:分治

关键步骤:

**1.确定分界点,一般以数组的中点为界,即mid=(l+r)/2 **

**2.递归排序左右边,mid左边left左边先排序,然后右边right再排序 **

3.最后归并合二为一,即排好序的left与right的数先存到数组temp中,再由temp传入原数组

视频链接辅助理解
【排序算法:归并排序【图解+代码】】 https://www.bilibili.com/video/BV1Pt4y197VZ/?share_source=copy_web&vd_source=6c3070fecaa59f130c4f496c1d1f6a70

代码如下

点击查看代码
include <iostream>

using namespace std;

const int N = 1e6 + 10;

int p[N],temp[N];  //需要一个temp数组暂时存放数

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);
    //递归处理左右两边的值,使得mid左右两边变成有序序列

	int i=l, j = mid + 1, cnt = 0;

	while (i <= mid && j <= r)
	{
		if (p[i] <= p[j]) temp[cnt++] = p[i++];
		else temp[cnt++] = p[j++];
        //哪个数的值小就取出来放入temp数组中
	}

	while (i <= mid) temp[cnt++] = p[i++];
	while (j <= r) temp[cnt++] = p[j++];
 //其中肯定有i或者j没有遍历完,把没有遍历完的数放入temp数组中
//(因为letf与right是有序的,所以最后留下来的数肯定比之前遍历好的数大,不然不会没有遍历完)

	for (int i = l,cnt=0; i <=r; i++,cnt++) p[i] = temp[cnt];
    //将temp中的数存入原数组p中
}

int main()
{
	int n,i;

	scanf_s("%d", &n);

	for (i = 0; i < n; i++)
	{
		scanf_s("%d", &p[i]);
	}

	merge_sort(p, 0, n - 1);

	for (i = 0; i < n; i++) {
		printf("%d ", p[i]);//最后遍历输出
	}

	return 0;
}

本人蒟蒻,如有错误或不恰当的地方还望指点,希望对你有所帮助,感谢观看我的博客

标签:sort,temp,int,mid,merge,排序
From: https://www.cnblogs.com/expect-999/p/17599008.html

相关文章

  • 为什么list.sort()比Stream().sorted()更快?
    昨天写了一篇文章《小细节,大问题。分享一次代码优化的过程》,里面提到了list.sort()和list.strem().sorted()排序的差异。说到listsort()排序比stream().sorted()排序性能更好。但没说到为什么。有朋友也提到了这一点。本文重新开始,先问是不是,再问为什么。真的更好吗?先简......
  • git 为什么merge记录时有时无
    之前在merge完分支的时候,在commit记录中,有时会会出现merge记录,有时就没有。在查了相关资料,原因如下:是否出现merge记录判别规则:自己分支是否对目标分支以前的提交时间线有改动,即如果自己分支的提交记录与目标分支的现有记录完全重合时,提交不会产生merge记录;如果提交是对目标分......
  • 【Python】使用 pyecharts 模块绘制动态时间线柱状图 ① ( 列表排序 | 使用 sorted 函
    文章目录一、列表排序1、使用sorted函数对容器进行排序2、使用list.sort函数对列表进行排序3、使用list.sort函数对列表进行排序-设置排序函数4、使用list.sort函数对列表进行排序-设置lambda匿名排序函数pyecharts画廊网站:https://gallery.pyecharts.org/#/......
  • Your configuration specifies to merge with the ref
    目录Yourconfigurationspecifiestomergewiththeref1.执行gitpull命令时,错误提示:1.1场景:分支名称拼写错误1.1.1场景描述1.1.2产生原因1.1.3解决方案1.2场景:远程端同名分支已被删除1.2.1场景描述1.2.2产生原因1.2.3解决方案1.3场景:其它场景(排除场景1和场景2)1.3.......
  • 论文解读:DeepSort(目标跟踪)
    本文来自公众号“AI大道理”——————​论文原文:https://arxiv.org/abs/1703.07402SORT是一个比较简单的算法,用FrRCNN做探测,卡尔曼滤波和匈牙利算法做跟踪。缺点:线性恒速运动模型可能并不精确,未考虑相机的非线性运动。未考虑同一目标再次出现的重识别(......
  • 无涯教程-jQuery - Sortable排序函数
    能够排序功能可与JqueryUI中的交互配合使用。此功能可在任何DOM元素上启用可排序功能。单击并将其拖动到列表中的新位置,其他项将调整以适合。默认情况下,可排序项目共享可拖动属性。Sortable-语法$(function(){$("#sortable").sortable();$("#sortable").disabl......
  • 洛谷 P3243 [HNOI2015] 菜肴制作 - toposort 需自己理解翻译题面
    P3243[HNOI2015]菜肴制作题目描述知名美食家小A被邀请至ATM大酒店,为其品评菜肴。ATM酒店为小A准备了\(n\)道菜肴,酒店按照为菜肴预估的质量从高到低给予\(1\)到\(n\)的顺序编号,预估质量最高的菜肴编号为\(1\)。由于菜肴之间口味搭配的问题,某些菜肴必须在另一些......
  • Python sorted() 函数和sort()函数对比分析
    Pythonsorted()函数一、概述sorted()函数是对所有可迭代的对象进行排序操作。sort与sorted的区别:sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作。list的sort方法返回的是对已经存在的列表进行操作,无返回值,而内置的sorted函数返回的是一个新的list,而不是......
  • sort排序
    数值排序: arr.sort((a,b)=>a.id-b.id); 字符串排序:varcompare=function(a,b){      if(a.name<b.name){        return-1;      }elseif(a.name>b.name){        return1;   ......
  • SORT:基于检测的目标跟踪的鼻祖
    本文来自公众号“AI大道理”​SORT是一种多目标跟踪的经典算法,整个算法是一些常规技术的简单组合,却达到了非常好的效果。Sort算法的核心是匈牙利匹配算法和卡尔曼滤波算法。​ 添加图片注释,不超过140字(可选)1、SORT简介SORT(SimpleOnlineandReal......