数据结构,题,在线求答案

 我来答
瑞候端瓜0Y
2017-06-13 · TA获得超过2039个赞
知道小有建树答主
回答量:323
采纳率:100%
帮助的人:96.4万
展开全部
二路归并排序,从大到小,递归法的过程:

             73 72 23 71 94 15 18 68
              /                   \
       73 72 23 71             94 15 18 68
       /         \             /         \
    73 72       23 71       94 15       18 68
   /     \     /     \     /     \     /     \
  73     72   23     71   94     15   18     68
   \     /     \     /     \     /     \     /
    73 72       71 23       94 15       68 18
       \         /             \         / 
       73 72 71 23             94 68 18 15
              \                   /
             94 73 72 71 68 23 18 15


//C语言测试程序

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

//合并函数
void mergeArray(int *data,int start,int middle,int end,int *temp)
{
int index01;
int index02;
int count;

index01=start; //数组01的指针
index02=middle+1; //数组02的指针
count=0;
while(index01<=middle && index02<=end)
{
if(data[index01]>data[index02]) //从大到小排序
{
temp[count++]=data[index01++];
}
else
{
temp[count++]=data[index02++];
}
}
while(index01<=middle)
{
temp[count++]=data[index01++];
}
while(index02<=end)
{
temp[count++]=data[index02++];
}
for(index01=0;index01<count;index01++)
{
data[start+index01]=temp[index01];
}
}
//显示排序过程
void showData(int *data,int start,int end)
{
    int i;
    for(i=start;i<=end;i++)
    {
        printf("%d ",data[i]);
    }
    printf("\n");
}
//分组函数
void mergeFunc(int *data,int start,int end,int *temp)
{
int middle;
if(start<end)
{
middle=(start+end)/2;
mergeFunc(data,start,middle,temp);
mergeFunc(data,middle+1,end,temp);
mergeArray(data,start,middle,end,temp);//合并
////////
showData(data,start,end);
////////
}
}
//归并排序
void mergeSort(int *data,int len)
{
int *ptr=NULL;
ptr=(int*)malloc(len*sizeof(int)); //用于保存中间数据
if(!ptr)
{
printf("\nOverflow.\n");
return;
}
mergeFunc(data,0,len-1,ptr);
free(ptr);
}

int main()
{
//数据
int data[]={73,72,23,71,94,15,18,68};
int len;
int i;
len=sizeof(data)/sizeof(int);
//打印数组
printf("原数组: ");
for(i=0;i<len;i++)
{
printf("%d ",data[i]);
}
printf("\n");
//归并排序
mergeSort(data,len);
//打印数组
printf("排序后: ");
for(i=0;i<len;i++)
{
printf("%d ",data[i]);
}
printf("\n");

return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式