c++ - 无法在 Visual Studio 程序中运行合并排序

标签 c++ visual-studio mergesort

我有关于归并排序的完整代码:

#include <iostream>
#include <iomanip>
using namespace std;

const int n = 8;
void merge(int *arr, int low, int high, int mid);
void mergesort(int *arr, int low, int high);
int main()
{
    int arr[n] = { 3,41,52,26,38,57,9,49 };
    mergesort(arr, 0, n - 1);
    for (int i = 0; i<n; i++)
    {
        cout << arr[i] << setw(3);
    }
    return 0;
}

void merge(int *arr, int low, int high, int mid)
{
    int i, j, k, temp[high - low + 1];
    i = low;
    j = mid + 1;
    k = 0;
    while (i <= mid && j <= high)
    {
        if (arr[i] <arr[j])
        {
            temp[k] = arr[i];
            k++;
            i++;
        }
        else
        {
            temp[k] = arr[j];
            k++;
            j++;
        }
    }
    while (i <= mid)
    {
        temp[k] = arr[i];
        k++;
        i++;
    }
    while (j <= high)
    {
        temp[k] = arr[j];
        k++;
        j++;
    }
    for (int i = low; i <= high; i++)
    {
        arr[i] = temp[i - low];
    }
}

void mergesort(int *arr, int low, int high)
{
    if (low <high)
    {
        int mid = (low + high) / 2;
        mergesort(arr, low, mid);
        mergesort(arr, mid + 1, high);
        merge(arr, low, high, mid);
    }
}

我能够在 Cshell(C++ 在线应用程序)中实现此代码。但是,当我使用我的 visual studio 时,它说“temp[high-low+1] 没有评估为一个常数”。因此,我无法运行我的代码。有人有什么建议吗?

最佳答案

在 C++ 中,数组必须具有编译时常量大小。因此,当您声明数组时,大小必须是常量表达式。一些编译器(如 GCC)允许将可变长度数组作为非标准扩展,但它 comes at a cost你真的不应该首先使用它。

相反,您应该使数组大小保持不变,或者使用 std::vector .

关于c++ - 无法在 Visual Studio 程序中运行合并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51186861/

相关文章:

运行我的随机 ID 生成时出现 C++ 段错误

c# - Azure函数 "Could not load file or assembly"

c++ - 类模板的成员模板函数上的enable_if

Java Generics MergeSort,线程中出现异常 "main"java.lang.ClassCastException 错误

algorithm - 归并排序是一种自适应算法吗?

c++ - 我在 C++ 中使用很多结构是正常的吗?

c++ - 互斥锁和 block 作用域

android - 如何在 C/C++ 中方便地发布算术溢出异常

c# - 为什么我不能在 VS 2010 中使用布局工具栏上的增加/减少水平间距按钮?

java - 无法弄清楚我的通用 mergeSort、IndexOutBoundException 错误