2302_79644694 2024-03-26 16:07 采纳率: 42.9%
浏览 6
已结题

c语言归并排序找错111



```c++
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int b[10];

void merge(int a[],int start,int mid,int end)
{
    //归并
    if(start>end) return ;
    
    for(int i=start;i<=end;i++)
    b[i]=a[i];
    
    int i,j,k;
    i=start;
    j=mid+1;
    k=0;
    
    while(i<=mid&&j<=end)
    {
        if(b[i]<b[j]) a[k++]=b[i++];
        else a[k++]=b[j++];
    }
    
    while(i<=mid) a[k++]=b[i++];
    while(j<=end) a[k++]=b[j++];
    
}


void mergesort(int a[],int i,int j)
{
    if(i>j) return ;
    
    int mid;
    mid=(i+j)/2;
    
    mergesort(a,i,mid);
    mergesort(a,mid+1,j);
    merge(a,i,mid,j);
}

int main()
{
    int a[10]={1,5,9,8,6,3,2,4,7,10};
    int i;
    
//    srand(time(NULL));
//    for(i=0;i<10;i++)
//    {
//        a[i]=rand()%10+1;
//    }
//    
//    for(i=0;i<10;i++)
//    printf("%d ",a[i]);
//    printf("\n");
//    fflush(stdout);
    
    //归并排序
    mergesort(a,0,9);
    
    
    
    for(i=0;i<10;i++)
    printf("%d ",a[i]);
    
}

```

  • 写回答

3条回答 默认 最新

  • 必胜的小铭 2024-03-26 17:19
    关注

    就一个问题,start=end也要直接return!!!

    
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
     
    int b[10];
     
    void merge(int a[], int start, int mid, int end) {
        // 归并
        if (start >= end) return;
     
        for (int i = start; i <= end; i++)
            b[i] = a[i];
     
        int i, j, k;
        i = start;
        j = mid + 1;
        k = start;
     
        while (i <= mid && j <= end)
        {
            if (b[i] < b[j]) 
                a[k++] = b[i++];
            else 
                a[k++] = b[j++];
        }
     
        while (i <= mid) 
            a[k++] = b[i++];
        while (j <= end) 
            a[k++] = b[j++];
     
    }
     
     
    void mergesort(int a[], int i, int j) {
        if (i >= j) return;
     
        int mid;
        mid = (i + j) / 2;
     
        mergesort(a, i, mid);
        mergesort(a, mid + 1, j);
        merge(a, i, mid, j);
    }
     
    int main() {
        int a[10] = { 1, 5, 9, 8, 6, 3, 2, 4, 7, 10 };
        int i;
     
        // srand(time(NULL));
        // for(i=0;i<10;i++)
        // {
        // a[i]=rand()%10+1;
        // }
        // 
        // for(i=0;i<10;i++)
        // printf("%d ",a[i]);
        // printf("\n");
        // fflush(stdout);
     
        // 归并排序
        mergesort(a, 0, 9);
     
        for (i = 0; i < 10; i++)
            printf("%d ", a[i]);
     
        return 0;
    

    @2301_80044167

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月13日
  • 已采纳回答 4月5日
  • 创建了问题 3月26日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题