数据结构之归并排序(递归实现)

这篇博客介绍了归并排序的递归实现过程,通过C++代码展示了如何将数组进行分治、归并,最终实现排序。博主首先定义了一个顺序列表的数据结构,然后详细解释了归并操作,接着使用递归对左右区间进行归并排序,最后展示了一个完整的归并排序函数以及主函数,用于输入数组并输出排序后的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<cstdlib>
using namespace std;
#define MAXSIZE 20
typedef int ElemType;
typedef struct{
	ElemType Array[MAXSIZE + 1];//Array[0]置哨
	int length;
}SqList;
void Merge(ElemType S[], ElemType T[], int i, int m, int n)//归并基程序
{//对S[i...m]和T[m+1...n]这两个有序表归并成一个有序表
	int j = m + 1, k = i;
	while (i <= m&&j <= n)
	{
		if (S[i] <= S[j]) T[k++] = S[i++];
		else T[k++] = S[j++];
	}
	if (i <= m)
		while (k <= n&&i <= m) T[k++] = S[i++];//k<=n一定成立,所有可有可无
	if (j <= n)
		while (k <= n&&j <= n) T[k++] = S[j++];//k<=n一定成立,所有可有可无
}

void MSort(ElemType S[], ElemType T[], int s, int t)//递归归并
{
	int m; 
	ElemType R[20];
	if (s == t) 
		T[s] = S[s];//只有一个元素
	else
	{//多个元素
		m = (s + t) / 2;//一分为二
		MSort(S, R, s, m);//递归左区间使左区间为一有序子表
		MSort(S, R, m + 1, t);//递归右区间使右区间为一有序子表
		Merge(R, T, s, m, t);//归并左右两有序子表为一个有序表
	}
}
void MergeSort(SqList &L)//归并排序
{
	MSort(L.Array, L.Array, 1, L.length);
}

int main(void)
{
	SqList L; int i;
	cout << "The length of LIST :"; cin >> L.length;
	cout << "enter nodes:" << endl;
	for (i = 1; i <= L.length; i++)
		cin >> L.Array[i];
	for (i = 1; i <= L.length; i++)
		cout << L.Array[i] << " ";
	cout << endl;
	MergeSort(L);
	for (i = 1; i <= L.length; i++)
		cout << L.Array[i] << " ";
	cout << endl;
	return(0);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值