鱼C论坛

 找回密码
 立即注册
查看: 4046|回复: 3

[已解决]归并排序

[复制链接]
发表于 2021-9-11 10:21:22 | 显示全部楼层 |阅读模式

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

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

x
请问哪里错了呀 找半天找不出来  
  1. #include<stdio.h>
  2. #include<stdio.h>
  3. #define MAX_size 100
  4. typedef struct{
  5.     int a[MAX_size];
  6.     int length;
  7. }SqLiszt;
  8. void Merge(int *sr,int *tr,int i,int m,int n){  //m为中间数  归并到tr  sr  1-m
  9.           int p1 =i,p2=n,temp = i;
  10.             while(p1<=m&& p2<=n){
  11.                   if(sr[p1]<sr[p2])
  12.                       tr[temp++]= sr[p1++];
  13.                         else
  14.                           tr[temp++]= sr[p2++];

  15.             }
  16.               while(p1<=m){
  17.                      tr[temp++]= sr[p1++];
  18.               }
  19.               
  20.               while(p2<=n){
  21.                     tr[temp++]= sr[p2++];

  22.               }
  23.             
  24. }
  25. void M_Sort(int *sr, int *tr1,int s,int t){ //s 为第一个 ,t 为最后一个
  26.          int mid;
  27.           int tr2[MAX_size+1];
  28.            if(s==t){
  29.                 tr1[s]= sr[s];
  30.            }
  31.                else{
  32.                     mid = (s+t)/2;
  33.                        M_Sort(sr,tr2,s,mid);  
  34.                        M_Sort(sr,tr2,mid+1,t);
  35.                        Merge(tr2,tr1,s,mid,t);
  36.                 }
  37.                  
  38. }
  39. void
  40. Merge_sort(SqLiszt *L){
  41.         M_Sort(L->a,L->a,1,L->length);
  42. }
  43. int main(){
  44.      SqLiszt L;
  45.      L.length =0;
  46.      int temp;
  47.         for(int i =1;i<=10;i++){
  48.               temp = 10-i;
  49.               L.a[i] = temp;
  50.               L.length ++;
  51.         }

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

  57.     return 0;
  58. }
复制代码
最佳答案
2021-9-11 11:01:07
代码还没有看完,不知道其他地方有没有问题,但这里肯定不对,代码的其他部分我再看看
这里的 p2 应该初始化为  m + 1
  1.     int p1 = i, p2 = m + 1, temp = i;
复制代码

1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-11 11:01:07 | 显示全部楼层    本楼为最佳答案   
代码还没有看完,不知道其他地方有没有问题,但这里肯定不对,代码的其他部分我再看看
这里的 p2 应该初始化为  m + 1
  1.     int p1 = i, p2 = m + 1, temp = i;
复制代码

1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-11 11:18:27 | 显示全部楼层
看完了,还有这个,其他应该没问题
2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-11 11:45:43 | 显示全部楼层
人造人 发表于 2021-9-11 11:18
看完了,还有这个,其他应该没问题

谢谢 正确了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-12 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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