万千只cnm 发表于 2021-9-11 10:21:22

归并排序

请问哪里错了呀 找半天找不出来
#include<stdio.h>
#include<stdio.h>
#define MAX_size 100
typedef struct{
    int a;
    int length;
}SqLiszt;
void Merge(int *sr,int *tr,int i,int m,int n){//m为中间数归并到trsr1-m
          int p1 =i,p2=n,temp = i;
            while(p1<=m&& p2<=n){
                  if(sr<sr)
                      tr= sr;
                        else
                        tr= sr;

            }
            while(p1<=m){
                     tr= sr;
            }
            
            while(p2<=n){
                  tr= sr;

            }
            
}
void M_Sort(int *sr, int *tr1,int s,int t){ //s 为第一个 ,t 为最后一个
         int mid;
          int tr2;
         if(s==t){
                tr1= sr;
         }
               else{
                  mid = (s+t)/2;
                     M_Sort(sr,tr2,s,mid);
                     M_Sort(sr,tr2,mid+1,t);
                     Merge(tr2,tr1,s,mid,t);
                }
               
}
void
Merge_sort(SqLiszt *L){
      M_Sort(L->a,L->a,1,L->length);
}
int main(){
   SqLiszt L;
   L.length =0;
   int temp;
      for(int i =1;i<=10;i++){
            temp = 10-i;
            L.a = temp;
            L.length ++;
      }

       Merge_sort(&L);
      printf("排序后的结果为:\n");
             for(int i= 1; i<=L.length;i++){
                  printf("%d ",L.a);
             }

    return 0;
}

人造人 发表于 2021-9-11 11:01:07

代码还没有看完,不知道其他地方有没有问题,但这里肯定不对,代码的其他部分我再看看
这里的 p2 应该初始化为m + 1
    int p1 = i, p2 = m + 1, temp = i;

人造人 发表于 2021-9-11 11:18:27

看完了,还有这个,其他应该没问题

万千只cnm 发表于 2021-9-11 11:45:43

人造人 发表于 2021-9-11 11:18
看完了,还有这个,其他应该没问题

谢谢 正确了{:5_92:}
页: [1]
查看完整版本: 归并排序