排序算法——归并排序

基本思想

归并排序是建立在归并操作上的一种非常有效的排序算法。该算法是采用分治法的一个非常典型的应用。将已有的子序列合并,得到完全有序的序列。即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路并归。

图片实现

就是把上面的数组一直按照一半拆开,然后拆到都是单个数字。然后再按照相反的逻辑进行逐层递归。

下面是动图,大家也可以看一下。

代码实现

复制代码
void _mergesort(int* a, int begin, int end, int* tmp)
{
	if (begin >= end)
		return;
	//将数据拆分
	int mid = (begin + end) / 2;
	_mergesort(a, begin, mid, tmp);
	_mergesort(a, mid+1, end, tmp);
	//递归
	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));
}
void MergeSort(int* a, int n)
{
	int* tmp = (int*)malloc(sizeof(int) * n);
	if (tmp == NULL)
	{
		perror("malloc");
		return;
	}
	_mergesort(a, 0, n - 1, tmp);
	free(tmp);
}
相关推荐
2501_9403152616 分钟前
航电oj:首字母变大写
开发语言·c++·算法
番茄大王sc21 分钟前
2026年科研AI工具深度测评(一):文献调研与综述生成领域,维普科创助手领跑学术严谨性
人工智能·深度学习·考研·学习方法·论文笔记
CodeByV37 分钟前
【算法题】多源BFS
算法
TracyCoder12340 分钟前
LeetCode Hot100(18/100)——160. 相交链表
算法·leetcode
浒畔居42 分钟前
泛型编程与STL设计思想
开发语言·c++·算法
派大鑫wink42 分钟前
【Day61】Redis 深入:吃透数据结构、持久化(RDB/AOF)与缓存策略
数据结构·redis·缓存
独处东汉1 小时前
freertos开发空气检测仪之输入子系统结构体设计
数据结构·人工智能·stm32·单片机·嵌入式硬件·算法
乐迪信息1 小时前
乐迪信息:AI防爆摄像机在船舶监控的应用
大数据·网络·人工智能·算法·无人机
放荡不羁的野指针2 小时前
leetcode150题-滑动窗口
数据结构·算法·leetcode
BHXDML2 小时前
数据结构:(一)从内存底层逻辑理解线性表
数据结构