⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 14.c

📁 数据结构练习共18道。
💻 C
字号:
#include "stdio.h"
#include "malloc.h"
int times=0;

void Merge(int data1[],int data2[],int s,int m,int n){
	int i,j,k;
	for(i=m+1,k=s;s<=m&&i<=n;++k)
		if(data1[s]<data1[i])data2[k]=data1[s++];
		else data2[k]=data1[i++];
	for(j=s;j<=m;++j,++k)
		data2[k]=data1[j];
	for(j=i;j<=n;++j,++k)
		data2[k]=data1[j];
}

void Msort(int data1[],int data2[],int n,int len){
	int start_p,end_p;
	start_p=0;
	while(start_p+len<n){
		end_p=start_p+2*len-1;
		if (end_p>=n)end_p=n-1;
		Merge(data1,data2,start_p,start_p+len-1,end_p);

		start_p=end_p+1;
	}
	if(start_p<n)
		for(;start_p<n;start_p++)data2[start_p]=data1[start_p];
}

void mergesort(int data1[],int n){
	int length=1,k=0;
	int *data2;
	data2=(int *)malloc(sizeof(int)*n);
	if(data2==NULL)return;

	while(length<n){
		if(k==0)Msort(data1,data2,n,length);
		else Msort(data2,data1,n,length);
		times++;
		length*=2;
		k=1-k;
	}
	if(k==1)
		for(k=0;k<n;++k)data1[k]=data2[k];
}




void main()
{
	int i;
	int list[9];
	for (i=0;i<10;i++)
	{
		printf("Input num %d:",i);
		scanf("%d",&list[i]);
	}

	printf("\nThe list is:");
	for(i=0;i<10;i++)printf("%d ",list[i]);

	mergesort(list,10);

	printf("\nThe sorted list is:");
	for(i=0;i<10;i++)printf("%d ",list[i]);
	printf("\nThe merge times is:%d",times);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -