MergeSort算法(混合排序)

本文介绍了一种经典的排序算法——归并排序,并通过C语言实现了一个具体的例子。该示例定义了一个整型数组,使用归并排序对其进行升序排列,并展示了排序前后的数组状态。

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

实验内容:在main函数中定义数A[]={52,49,80,36,14,58,61,23,97},调用归并排序函数MergeSort对A[]中的数据进行排序,调试并观察排序过程。


#include<stdio.h>
#include<stdlib.h>

void merge(int *data,int low,int mid,int high)
{//将两个有序的子文件data[low..m)和data[m+1..high]归并成一个有序的子文件data[low..high]
	int i=low;//置初始值
	int j=mid+1;
	int p=0;
	int *temp;//temp是局部向量
	temp=(int *)malloc((high-low+1)*sizeof(int));
	if(!temp) return;//申请空间失败
	while((i<=mid)&&(i<=high))
		temp[p++]=(data[i]<=data[j])?data[i++]:data[j++];//两子文件非空时取其小者输出到temp[p]上
	while(i<=mid)//若第1个子文件非空,则复制剩余记录到temp中
		temp[p++]=data[i++];
	while(j<=high)
		temp[p++]=data[j++];//若第2个子文件非空,则复制剩余记录到temp中
	for(p=0,i=low;i<=high;p++,i++)
		data[i]=temp[p];//归并完成后将结果复制回data[low..high]
}
void mergesort(int data[],int low,int high)
{//用分治法对data[low..high]进行二路归并排序
	int mid;
	if(low<high)
	{//区间长度大于1
		mid=(low+high)/2;//分解
	mergesort(data,low,mid);//递归地对R[low..mid]排序
	mergesort(data,mid+1,high);//递归地对R[mid+1..high]排序
	merge(data,low,mid,high);//组合,将两个有序区归并为一个有序区
	}
}
void main()
{
	int A[9]={52,49,80,36,14,58,61,23,97};//这里对8个元素进行排序
	int i;
	for(i=0;i<9;i++)
		printf("A[%d]=%d        ",i,A[i]);
	mergesort(A,0,8);
	printf("\nMergeSort...\n");
	for(i=0;i<9;i++)
		printf("A[%d]=%d        ",i,A[i]);//输出测试
}


运行结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值