vIllaInssss 2020-03-19 02:40 采纳率: 75%
浏览 159
已采纳

请大神帮我看看 这归并排序哪里写错了

#include
#include
#include
//归并排序 先划分 分别排序 然后归并
int helper[100];

void merger(int*a,int p,int mid,int r)
{

memcpy(helper,a,sizeof(int)*(r-p+1));

int left=p;//左侧队伍头部指针,指向带比较的元素 
int right=mid+1;//右侧 
int current=p;//原数组指针,指向代填入数据的位置; 
while(left<=mid&&right<=r)
{
    if(helper[left]<=helper[right])
    { a[current]=helper[left];
       current++;
       left++;
    }else{
        a[current]=helper[left];
       current++;
       right++;
    }
}
while(left<=mid)
{
    a[current]=helper[left];
    current++;
    left++;
}

}
void mergersort(int*a,int p,int r)
{
if(p<r)
{
int mid=(p+r)/2;
mergersort(a,p,mid);
for(int i=0;i<3;i++)

    mergersort(a,mid+1,r);
    for(int i=3;i<6;i++)

    merger(a,p,mid,r);
}

}
main()
{
int a[]={1,3,5,7,9,2};
mergersort(a,0,5);
for(int i=0;i<6;i++)
printf("%d",a[i]);
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-03-19 09:28
    关注
    #include<stdlib.h>
    #include<string.h>
    #include<stdio.h>
    //归并排序 先划分 分别排序 然后归并 
    int helper[100];
    void merger(int arr[], int left, int mid, int right, int *temp){
        int i = left;
        int j = mid + 1;
        int k = left;
        while (i <= mid&&j <= right){
            if (arr[i] < arr[j]){
                temp[k++] = arr[i++];
            }
            else{
                temp[k++] = arr[j++];
            }
        }
        while (i <= mid){
            temp[k++] = arr[i++];
        }
        while (j <= right){
            temp[k++] = arr[j++];
        }
        memcpy(arr + left, temp + left, sizeof(int)*(right - left+1));
    }
    void mergesort(int arr[],int left,int right,int *temp){
        int mid = 0;
        if (left < right){
            mid = left + (right - left) / 2;
            mergesort(arr, left, mid, temp);
            mergesort(arr, mid + 1, right, temp);
            merger(arr, left, mid, right, temp);
        }
    }
    int main()
    {
    int a[]={1,3,5,7,9,2};
    mergesort(a,0,5,helper);
    for(int i=0;i<6;i++)
    printf("%d ",a[i]);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题