鱼C论坛

 找回密码
 立即注册
查看: 42|回复: 4

[已解决]求大佬帮我看看哪里错了,运行不出结果

[复制链接]
最佳答案
0 
发表于 2020-9-16 16:27:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
#include<stdio.h>

#define MAX 10000

struct List
{
        int data[MAX];
        int length;
};

List list;
void init(List &list,int n);
void MergeSort(List &list);
void Sort(List &list,int L,int mid,int R);

void init(List &list,int n)
{
        int i;
       
        list.length=0;
       
        printf("输入序列:");
        for(i=0;i<n;i++)
        {
                scanf("%d",list.data[i]);
                list.length++;
        }
}


void MergeSort(List &list,int L,int R)
{
        if(L>=R){
                return ;
        }
       
        int mid=(L+R)/2;
       
        MergeSort(list,L,mid);              //左侧分治
        MergeSort(list,mid+1,R);            //右侧分治
        Sort(list,L,mid,R);                 //排序
}


void Sort(List &list,int L,int mid,int R)
{
        int a[list.length];
        int i=L;
        int k=0;
        int j=mid+1;
       
        while(i<=mid&&j<=R)
        {
                if(list.data[i]<list.data[j]){
                        a[k++]=list.data[i++];
                }
                else{
                        a[k++]=list.data[j++];
                }
        }
       
        if(i==mid+1)
        {
                while(j<=R)
                {
                        a[k++]=list.data[j++];
                }
        }
       
        if(j==R+1)
        {
                while(i<=mid)
                {
                        a[k++]=list.data[i++];
                }
        }
       
        for(i=L,j=0;j<k;i++,j++)
        {
                list.data[i]=a[j];
        }
}

int main(void)
{
        int n;
        int i;
       
        printf("输入整数个数:");
        scanf("%d",&n);
       
        init(list,n);
        MergeSort(list,0,list.length);
       
        printf("输出排序结果:");
        for(i=0;i<n;i++)
        {
                printf("%d ",list.data[i]);
        }
       
        printf("\n");
       
        return 0;
}
最佳答案
2020-9-16 16:48:41
本帖最后由 xieglt 于 2020-9-16 16:57 编辑

代码里有2个错误,
1、函数 void init(List &list,int n) 里头

  1. scanf("%d",list.data[i]); 应该写成
  2. scanf("%d",&list.data[i]);
复制代码


2、void Sort(List &list,int L,int mid,int R) 里头

  1. int a[list.length];  应该写成
  2. int * a = (int *)malloc(list.length);
复制代码

后面记得 free(a);
记得包含头文件 #include "stdlib.h"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
34 
发表于 2020-9-16 16:48:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 xieglt 于 2020-9-16 16:57 编辑

代码里有2个错误,
1、函数 void init(List &list,int n) 里头

  1. scanf("%d",list.data[i]); 应该写成
  2. scanf("%d",&list.data[i]);
复制代码


2、void Sort(List &list,int L,int mid,int R) 里头

  1. int a[list.length];  应该写成
  2. int * a = (int *)malloc(list.length);
复制代码

后面记得 free(a);
记得包含头文件 #include "stdlib.h"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2020-9-16 17:06:23 | 显示全部楼层
xieglt 发表于 2020-9-16 16:48
代码里有2个错误,
1、函数 void init(List &list,int n) 里头

哇,成功了,谢谢大佬!
我看看用这个方法能不能改另一端代码,到时候要是不行的话我再问你
那大佬能讲一下第二个的原理嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
34 
发表于 2020-9-16 17:44:23 | 显示全部楼层
Christopher. 发表于 2020-9-16 17:06
哇,成功了,谢谢大佬!
我看看用这个方法能不能改另一端代码,到时候要是不行的话我再问你
那大佬能讲 ...

动态数组定义不能这么定义

  1. int length = 100;
  2. int a[length];
复制代码


动态数组定义要用malloc (c) 或者 new (c++)

  1. c的写法
  2. int length = 100;
  3. int * a = (int *)malloc(length);
  4. ...
  5. free(a)
  6. 或者c++的写法
  7. int length = 100;
  8. int * a = new int [100]
  9. ...
  10. delete [] a;
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 2020-9-16 17:47:38 | 显示全部楼层
xieglt 发表于 2020-9-16 17:44
动态数组定义不能这么定义

哦哦哦,好的,谢谢大佬啦
那我再开一个问题吧,这样你能多弄一个最佳答案
我还有一个也是无法运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1

GMT+8, 2020-9-30 23:35

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表