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

归并排序

时间:2022-09-03 23:22:38浏览次数:52  
标签:归并 end int arr mid 数组 front 排序

需要额外空间的外部排序?

菜鸟教程版本

这个版本的写法很不一样,

  1. 首先,它每次都copy构造了两个子数组,然后再从这两个子数组中挑元素往原数组放
  2. 构造的两个子数组容量都+1,并且设置末尾值为max值,为了比较大小的时候方便
 // 合并操作
 void Merge(vector<int>& arr, int front, int mid, int end) {
	 // 这是个什么构造方式,是类似于传入一个vector,然后copy一份对吧
	 vector<int> LeftSubArr(arr.begin() + front, arr.begin() + mid + 1);// 左半部分数组,注意这里额外加了1
	 vector<int> RightSubArr(arr.begin() + mid + 1, arr.begin() + end + 1);// 右半部分数组,这里
	 // 左半部分的指针和右半部分的指针
	 int idxLeft = 0, idxRight = 0;
	 // 后面的意思是返回编译器允许的int最大值
	 // 在数组末尾插入int最大值?
	 LeftSubArr.insert(LeftSubArr.end(), numeric_limits<int>::max());
	 RightSubArr.insert(RightSubArr.end(), numeric_limits<int>::max());
	 // Pick min of LeftSubArray[idxLeft] and RightSubArray[idxRight], and put into Array[i]
	 for (int i = front; i <= end; i++) {
		 if (LeftSubArr[idxLeft] < RightSubArr[idxRight]) {
			 arr[i] = LeftSubArr[idxLeft];
			 idxLeft++;
		 }
		 else {
			 arr[i] = RightSubArr[idxRight];
			 idxRight++;
		 }
	 }
 }

 // 手写归并排序
 // 待排序的数组,待排序序列的起始下标、结束下标
 void MergeSort(vector<int>& arr, int front, int end) {
	 if (front >= end) return;// 当数组长度不合法或者数组长度为1时不理会
	 int mid = (front + end) / 2;
	 MergeSort(arr, front, mid);// 处理左半边
	 MergeSort(arr, front, mid);// 处理右半边
     Merge(arr, front, mid, end);
 }

标签:归并,end,int,arr,mid,数组,front,排序
From: https://www.cnblogs.com/yaocy/p/16387362.html

相关文章

  • 排序
    其实排序能用的上的就三个:快排,归并,基排(\(O(wys)\))。(其实priority_queue可能也算)快排很好说,sort就行。还有一个stable_sort是相同大小元素顺序不变的稳定排序算法。(事实上......
  • js 实现快速排序
    //快速排序//稳定性//快速排序是以两个游标(指针)双向遍历,当两个指针相遇则遍历结束,并将相遇位置与基准值进行交换,递归出口为左游标>=右游标//快速排序的每一轮处理......
  • 饮冰三年-人工智能-Pandas-78-Pandas 新增、统计、排序
    上一篇:饮冰三年-人工智能-Pandas-77-Pandas数据查询 数据准备可参考:饮冰三年-人工智能-Django淘宝拾遗-75-数据准备一、新增数据列1.1直接赋值#1:直接赋值(将性别......
  • 信息学奥赛一本通 1185:单词排序
    时间限制:1000ms      内存限制:65536KB提交数:20423   通过数:10401【题目描述】输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字典......
  • 排序算法整理(包括初赛)
    排序算法整理常见考点将一个乱掉的字符串排回有序(以交换为基本操作)的最少操作,就是冒泡排序。排序算法的稳定性排序算法的时间复杂度排序算法的稳定性稳定性是指排......
  • 信息学奥赛 1181:整数奇偶排序
    时间限制:1000ms      内存限制:65536KB提交数:23930   通过数:15560【题目描述】给定10个整数的序列,要求对其重新排序。排序要求:1.奇数在前,偶......
  • 信息学一本通 1178:成绩排序
    时间限制:1000ms      内存限制:65536KB提交数:48847   通过数:20113【题目描述】给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出......
  • 分页limit和排序order by
    --排序:升序ESC,降序DESC--orderby通过哪个字段来排序,怎么排--查询的结果根据成绩降序排序SELECTs.studentNo,studentName,subjectName,studentResu......
  • 图论基础:欧拉路,拓扑排序,树的直径与重心
    欧拉路首先结论:一个图存在欧拉路则每个点的入度等于出度或者一个点的入度比出度大一(终点),一个点的入度比出度小一(起点),其他点入度等于出度。然后是朴实无华的爆算。void......
  • 【数据结构】二叉树搜索树(二叉排序树)BST专题
    46.二叉搜索树的后序遍历序列classSolution{public:vector<int>seq;boolverifySequenceOfBST(vector<int>sequence){seq=sequence;......