四、递归并排序(C语言源代码)

这篇博客详细介绍了如何使用C语言实现递归归并排序的算法,通过递归分解数组并进行有序合并,达到整体排序的目的。内容涵盖了归并排序的基本原理和具体步骤,适合想要学习数据结构和排序算法的读者。

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

/***************************************************/
/*    Description:四、递归并排序(C语言源代码)
/*    Date:2021/9/18
/*    Author:汝南城
/****************************************************/
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100

/*排序算法基于的顺序表存储结构*/
typedef int KeyType;
typedef struct {
	int key;
	char name[10];//other info
}RedType;

typedef struct {
	RedType r[MAXSIZE + 1];
	int length;
}SqList;

/*①合并两个相邻的有序序列*/
void Merge(RedType R[], RedType T[], int low, int mid,int high)
{
	int i = low; int j = mid + 1; int k = low;
	while (i <= mid && j <= high)
	{
		if (R[i].key < R[j].key)
			T[k++] = R[i++];
		else
			T[k++] = R[j++];
	}
	while(i<=mid)T[k++] = R[i++];
	while(j<=high)T[k++] = R[j++];
}

/*②2路递归归并排序将 R[low.. high]中的记录归并排序后放入 T[low.. high]中*/
void Msort(RedType R[], RedType T[], int low, int high)
{
	RedType S[11];
	if (low == high)
		T[low] = R[low];         /*当长度为1时,递归结束*/
	else
	{
		int mid = (low + high) / 2;
		Msort(R,S,low,mid);      /*对子序列 R[low.. mid]递归归并排序, 结果放入S[low .. mid]*/
		Msort(R,S, mid+1, high); /*对子序列 R[mid+1.. high]递归归并排序, 结果放入S[mid+1.. high]*/
		Merge(S,T,low,mid,high); /*将S[low ..mid]和S[mid + l..high]归并到 T[low ..high]*/
	}
}

void MergeSort(SqList* L, RedType T[])
{
	Msort(L->r,T,1,L->length);
}

void main()
{
	SqList* L1 = (SqList*)malloc(sizeof(SqList));
	RedType T[11];

	RedType i;
	L1->length = 0;
	for (i.key = 100; i.key > 90; i.key--)
	{
		L1->r[101 - i.key].key = i.key;
		L1->length++;
	}

	for (int j = 1; j <= 10; j++)
	{
		printf("%d ", L1->r[j].key);
	}
	printf("\n");


	MergeSort(L1, T);


	for (int j = 1; j <= 10; ++j)
	{
		printf("%d ", T[j].key);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值