【数据结构】——排序篇(下)
创始人
2024-12-26 16:10:18
0

前言:前面我们的排序已经详细的讲解了一系列的方法,那么我们现在久之后一个归并排序了,所以我们现在就来讲解一下归并排序。

在这里插入图片描述

归并排序:

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and
Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有
序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
在这里插入图片描述

void _MergeSort(int* a, int begin, int end, int* tmp) { 	if (begin >= end) 		return;  	int mid = (begin + end) / 2; 	// [begin, mid][mid+1, end] 	_MergeSort(a, begin, mid, tmp); 	_MergeSort(a, mid + 1, end, tmp);  	// [begin, mid][mid+1, end]归并 	int begin1 = begin, end1 = mid; 	int begin2 = mid + 1, end2 = end; 	int i = begin; 	while (begin1 <= end1 && begin2 <= end2) 	{ 		if (a[begin1] < a[begin2]) 		{ 			tmp[i++] = a[begin1++]; 		} 		else 		{ 			tmp[i++] = a[begin2++]; 		} 	}  	while (begin1 <= end1) 	{ 		tmp[i++] = a[begin1++]; 	}  	while (begin2 <= end2) 	{ 		tmp[i++] = a[begin2++]; 	}  	memcpy(a + begin, tmp + begin, sizeof(int) * (end - begin + 1)); } 

a是我们待排序的数组,里面存放了要排序的数据,tmp是我们额外开辟的数组用来存放我们排好序的数据,而我们排好序的数据则是像链表一样尾插入数组的。我们先找出中间值,给这个区间分成两个小区间,两个小区间各自在分成小区间。从左到右逐一比较两个小区间中的元素,把较小的元素优先放入额外开辟的数组tmp,如果一个小区间的全部尾插到tmp中就结束了循环,而另外一个数组则按顺序的尾插到tmp中。最后我们的tmp中的数据拷贝到数组a中就完成了。
在这里插入图片描述

void MergeSort(int* a, int n) { 	int* tmp = (int*)malloc(sizeof(int) * n); 	if (tmp == NULL) 	{ 		perror("malloc fail"); 		return; 	}  	_MergeSort(a, 0, n - 1, tmp);  	free(tmp); } 

这里就是用来开辟额外数组tmp的,我们传参到函数_MergeSort,在_MergeSort中递归完成排序之后就返回,再将开辟的空间销毁。

如果最大家有所帮助的话就支持一下吧!感谢大家!

相关内容

热门资讯

今日科普!闲逸斗地主外 挂(辅... 今日科普!闲逸斗地主外 挂(辅助挂)外挂透明挂辅助挂(2020已更新)(哔哩哔哩)1、任何闲逸斗地主...
十分钟私人辅助!德州透视是真的... 1、十分钟私人辅助!德州透视是真的假的(透视脚本下载)详细辅助模拟器(确实模拟器);详细教程。2、透...
揭秘!网易棋牌输赢有规律吗(透... 揭秘!网易棋牌输赢有规律吗(透视)透明挂透视辅助器(2023已更新)(哔哩哔哩)进入游戏-大厅左侧-...
8分钟发现!手机长城麻将软挂神... 8分钟发现!手机长城麻将软挂神器,咪咪扑克切实有挂,解说技巧(有挂总结);1、用户打开应用后不用登录...
重要通知!掌酷十三张赢分小秘诀... 重要通知!掌酷十三张赢分小秘诀(辅助挂)外挂透明挂辅助器(2025已更新)(哔哩哔哩);1、很好的工...
七分钟透视插件!pokerno... 七分钟透视插件!pokernow辅助工具(透视器脚本)详细辅助器(果然器);是一款可以让一直输的玩家...
技术分享!进贤聚友棋牌有挂吗(... 技术分享!进贤聚友棋牌有挂吗(透明挂)透明挂透视辅助插件(2020已更新)(哔哩哔哩)一、进贤聚友棋...
7分钟辅助!旺旺福建麻将小程序... 7分钟辅助!旺旺福建麻将小程序麻将,红龙扑克切实真的是有挂,新2025教程(有挂透视)一、旺旺福建麻...
查到实测!微信里的欢乐麻将是不... 查到实测!微信里的欢乐麻将是不是有挂(辅助)外挂透明挂辅助软件(2024已更新)(哔哩哔哩)1、在微...
一分钟快速了解!网易棋牌挂怎么... 一分钟快速了解!网易棋牌挂怎么开(透明挂)透视脚本辅助脚本(2020已更新)(哔哩哔哩)1、该软件可...