Christopher. 发表于 2020-9-16 16:27:26

求大佬帮我看看哪里错了,运行不出结果

#include<stdio.h>

#define MAX 10000

struct List
{
        int data;
        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);
                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;
        int i=L;
        int k=0;
        int j=mid+1;
       
        while(i<=mid&&j<=R)
        {
                if(list.data<list.data){
                        a=list.data;
                }
                else{
                        a=list.data;
                }
        }
       
        if(i==mid+1)
        {
                while(j<=R)
                {
                        a=list.data;
                }
        }
       
        if(j==R+1)
        {
                while(i<=mid)
                {
                        a=list.data;
                }
        }
       
        for(i=L,j=0;j<k;i++,j++)
        {
                list.data=a;
        }
}

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);
        }
       
        printf("\n");
       
        return 0;
}

xieglt 发表于 2020-9-16 16:48:41

本帖最后由 xieglt 于 2020-9-16 16:57 编辑

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

scanf("%d",list.data); 应该写成
scanf("%d",&list.data);


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

int a;应该写成
int * a = (int *)malloc(list.length);

后面记得 free(a);
记得包含头文件 #include "stdlib.h"

Christopher. 发表于 2020-9-16 17:06:23

xieglt 发表于 2020-9-16 16:48
代码里有2个错误,
1、函数 void init(List &list,int n) 里头



哇,成功了,谢谢大佬!
我看看用这个方法能不能改另一端代码,到时候要是不行的话我再问你
那大佬能讲一下第二个的原理嘛

xieglt 发表于 2020-9-16 17:44:23

Christopher. 发表于 2020-9-16 17:06
哇,成功了,谢谢大佬!
我看看用这个方法能不能改另一端代码,到时候要是不行的话我再问你
那大佬能讲 ...

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

int length = 100;
int a;


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

c的写法
int length = 100;
int * a = (int *)malloc(length);
...
free(a)
或者c++的写法
int length = 100;
int * a = new int
...
delete [] a;

Christopher. 发表于 2020-9-16 17:47:38

xieglt 发表于 2020-9-16 17:44
动态数组定义不能这么定义




哦哦哦,好的,谢谢大佬啦
那我再开一个问题吧,这样你能多弄一个最佳答案
我还有一个也是无法运行
页: [1]
查看完整版本: 求大佬帮我看看哪里错了,运行不出结果