小弟先上正确代码
#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的数据也没有变化,为什么两种方法却得到不一样的结果,下面附上两种方案的运行图片(第一个是对的,第二个是错的),跪求大佬告知!!!