表达式的计算结果不是常数

来源:3-2 归并排序法的实现

慕斯卡2143342

2020-06-15

我按照你的程序写有问题

template<class T>
void __merge(T arr[], int L,int mid, int R)
{
	T aux[R-L+1];
	//创建临时空间
	for (int i = L; i <= R; i++)
	{
		aux[i - L] = arr[i];
	}
	int i = L;
	int j = mid + 1;
	for (int k = L; k <= R; k++)
	{
		if (i > mid)
		{
			arr[k] = aux[j-L];
			j++;
		}
		else if (j > R)
		{
			arr[k] = aux[i - L];
			i++;
		}
		else if (aux[i - L] <= aux[j - L])
		{
			arr[k] = aux[i - L];
			i++;
		}
		else
		{
			arr[k] = aux[j - L];
			j++;
		}
	}
}
template<class T>
void __MergeSort(T arr[], int L, int R)//[L,R] R为最后一个元素的位置
{
	if (L >= R)
		return;
	int mid = (L + R) / 2;
	__MergeSort(arr, L, mid);
	__MergeSort(arr, mid + 1, R);
	__merge(arr, L, mid, R);
}
template<class T>
void MergeSort(T arr[], int n)
{
	__MergeSort(arr, 0, n-1);
}

结果显示
图片描述

可以帮我看看怎么回事吗?

写回答

3回答

liuyubobobo

2020-06-15

由于 VS 所使用的 C++ 编译器不遵循 C++ 国际标准,所以课程使用的个别语法可能会出错,在这一小节,主要在  T aux[r-l+1]; 这个声明上。替代方式,请参考代码中的注释:12,13,14,16, 和 39 行。


可以参考课程代码中给出的注释:https://git.imooc.com/coding-71/coding-71/src/master/03-Sorting-Advance/Course%20Code%20%28C++%29/02-Merge-Sort/main.cpp


继续加油!:)

0
1
慕斯卡2143342
非常感谢!
2020-06-15
共1条回复

慕设计9422144

2020-11-27

这个代码的注释没有了,老师能再发一次吗

0
1
liuyubobobo
https://git.imooc.com/coding-71/coding-71/src/master/03-Sorting-Advance/Course%20Code%20%28C++%29/02-Merge-Sort/main.cpp
2020-11-27
共1条回复

慕容2390529

2020-11-06

请问这个问题最后是怎么解决的呢?那个链接打不开了

0
3
liuyubobobo
回复
慕设计9422144
我不确定在你的环境遇到了什么问题,我这里没有问题。你可以在课程的官方代码仓下,找到这一章第二小节的代码。在课程网页端,点击“下载”,“查看讲师源码”即可。
2020-11-28
共3条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程