扶我起来我还能敲几行
2021-03-31 22:07
采纳率: 100%
浏览 34
已采纳

一个让我非常疑惑的问题,恳请各路大佬抽空帮忙指点一下到底是哪里有问题!

小弟先上正确代码

#include <stdio.h>

//合体函数 
void heti(int *arr, int *temp, int left, int right, int mid)
{
    int i = left;
    int j = mid + 1;
    int t = 0;
    while(i <= mid && j <= right)
    {
        if(arr[i] >= arr[j])
        {
            temp[t++] = arr[j++];
        }
        else
        {
            temp[t++] = arr[i++];
        }
    }
    while(i <= mid)
    {
        temp[t++] = arr[i++];
    }
    while(j <= right)
    {
        temp[t++] = arr[j++];
    }
    for (i = 0; i < t; i++)
    {
        arr[left + i] = temp[i];
    }
}

//分开函数 
void fenkai(int *arr, int *temp, int left, int right)
{
    if(left < right)
    {
        int mid = (left + right) / 2;
        //向左进行递归分解
        fenkai(arr, temp, left, mid);
        fenkai(arr, temp, mid + 1, right); 
        //调用合体函数 
        heti(arr, temp, left, right, mid);
    }
}

int main()
{
    int n;
    scanf("%d", &n);
    int arr[n], temp[n];
    for(int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    fenkai(arr, temp, 0, n - 1);
    for(int i = 0; i < n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
} 

问题描述:该问题是一个数组归并排序的代码,在合体函数的最后要把temp数组的元素全部复制到arr数组,为什么一定要arr[left + i] = temp[i],而不能直接用arr[i] = temp[i],我寻思我给left赋值就是赋的0啊,而且left的数据也没有变化,为什么两种方法却得到不一样的结果,下面附上两种方案的运行图片(第一个是对的,第二个是错的),跪求大佬告知!!!

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题