Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的C++;代码不';对于较大的随机阵列,它不能很好地工作_C++ - Fatal编程技术网

C++ 我的C++;代码不';对于较大的随机阵列,它不能很好地工作

C++ 我的C++;代码不';对于较大的随机阵列,它不能很好地工作,c++,C++,我已经编写了生成1000000大小的数组的代码,并使用合并排序和插入排序算法对其进行排序,然后测量每个进程所花费的时间。它适用于最大尺寸为100000的阵列。但一旦我将n(数组大小)更改为1000000并编译和运行它,程序就会正常工作。我使用的是Code::Blocks 13编译器,它具有遵循c++11 ISO语言标准的g++编译器 代码如下: #include<iostream> #include<climits> #include<cstdlib> #in

我已经编写了生成1000000大小的数组的代码,并使用合并排序和插入排序算法对其进行排序,然后测量每个进程所花费的时间。它适用于最大尺寸为100000的阵列。但一旦我将
n
(数组大小)更改为1000000并编译和运行它,程序就会正常工作。我使用的是Code::Blocks 13编译器,它具有遵循c++11 ISO语言标准的g++编译器

代码如下:

#include<iostream>
#include<climits>
#include<cstdlib>
#include<ctime>
#include<chrono>
using namespace std;
void insertion_sort(long inputSize, long  *inputArray);
void merge(long *inputArray, long low, long mid, long high);
void merge_sort(long *inputArray, long low, long high);
int main()
{
    srand(time(NULL));
    long n = 1000000;
    long inputArray1 [n];     //Declare the two arrays of size n
    long inputArray2 [n];
    cout << endl << "Unsorted List" << endl;
    for (long i = 0; i < n; i++) //initialize the arrays of size n with random n numbers
    {
        inputArray1[i] = inputArray2[i] = rand(); //Generate a random number
        //cout<<inputArray1[i]<<" ";  //Display each element in the array
    }
    std::chrono::high_resolution_clock::time_point Start = std::chrono::high_resolution_clock::now();
    insertion_sort(n, inputArray1); //calling the insertion_sort to sort the array of size n
    std::chrono::high_resolution_clock::time_point End =  std::chrono::high_resolution_clock::now();
    long long timeTaken = std::chrono::duration_cast<std::chrono::microseconds>(End - Start).count();
    cout << endl << endl << "Sorted list using Insertion Sort" << endl;
    /*for (int x=0;x<n;x++){     //Display the sorted array which was sorted using insertion_sort
          cout<<inputArray1[x]<<" "<<" ";
    }*/
    cout << endl << "Time taken = " << timeTaken << " microseconds";
    Start = std::chrono::high_resolution_clock::now();
    merge_sort(inputArray2, 0, n); //calling merge_sort to sort the array of size n
    End  = std::chrono::high_resolution_clock::now();
    timeTaken = std::chrono::duration_cast<std::chrono::microseconds>(End - Start).count();
    cout << endl << endl << "Sorted list using Merge Sort" << endl;
    /*for (int x=0;x<n;x++){     //Display the sorted array which was sorted using merge_sort
        cout<<inputArray2[x]<<" "<<" ";
     }*/
    cout << endl << "Time taken = " << timeTaken << " microseconds";
    return 0;
}

void insertion_sort(long inputSize, long *inputArray)
{
    for (long i = 1; i < inputSize; i++)
    {
        long key = inputArray[i];
        long b = i - 1;
        while ((b >= 0) && (inputArray[b] > key))
        {
            inputArray[b + 1] = inputArray[b];
            b = b - 1;
        }
        inputArray[b + 1] = key;

    }
    return;
}

void merge_sort(long *inputArray, long low, long high)
{
    if (low < high)
    {
        long mid = (low + high) / 2;
        merge_sort(inputArray, low, mid);
        merge_sort(inputArray, mid + 1, high);
        merge(inputArray, low, mid, high);
    }
    return;
}

void merge(long *inputArray, long low, long mid, long high)
{
    long n1 = mid - low + 1;
    long n2 = high - mid;
    long *L = new long [n1 + 1];
    long *R = new long [n2 + 1];
    for (long i = 0; i <= n1; i++)
    {
        L[i] = inputArray[low + i];

    }
    for (long j = 0; j <= n2; j++)
    {
        R[j] = inputArray[mid + j + 1];
    }
    L[n1] = INT_MAX;
    R[n2] = INT_MAX;
    long i = 0;
    long j = 0;
    for (long k = low; k <= high; k++)
    {
        if (L[i] <= R[j] )
        {
            inputArray[k] = L[i];
            i = i + 1;
        }
        else
        {
            inputArray[k] = R[j];
            j = j + 1;
        }

    }
    delete[] L;
    delete[] R;
    return;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
无效插入\排序(长输入大小,长*输入阵列);
无效合并(长*输入阵列、长低、长中、长高);
无效合并_排序(长*输入阵列、长低位、长高位);
int main()
{
srand(时间(空));
长n=1000000;
long inputArray1[n];//声明大小为n的两个数组
长输入阵列2[n];
库特

第一,可变长度数组在标准C++中无效,<代码> n>代码>应为代码> const 假设

long
为4个字节,这两个数组占用8MB的堆栈大小,这比正常堆栈的大小大。程序因以下原因崩溃

要解决此问题,请使用
std::vector
而不是本机数组

第一,可变长度数组在标准C++中无效,<代码> n>代码>应为代码> const 假设

long
为4个字节,这两个数组占用8MB的堆栈大小,这比正常堆栈的大小大。程序因以下原因崩溃

要解决此问题,请使用
std::vector
而不是本机数组

第一,可变长度数组在标准C++中无效,<代码> n>代码>应为代码> const 假设

long
为4个字节,这两个数组占用8MB的堆栈大小,这比正常堆栈的大小大。程序因以下原因崩溃

要解决此问题,请使用
std::vector
而不是本机数组

第一,可变长度数组在标准C++中无效,<代码> n>代码>应为代码> const 假设

long
为4个字节,这两个数组占用8MB的堆栈大小,这比正常堆栈的大小大。程序因以下原因崩溃


要解决此问题,请使用
std::vector
而不是本机数组。

您可以使用新的:

long* inputArray1 = new long[n];    
long* inputArray2 = new long[n];

不要忘记在main的末尾删除它。

您可以使用新的:

long* inputArray1 = new long[n];    
long* inputArray2 = new long[n];

不要忘记在main的末尾删除它。

您可以使用新的:

long* inputArray1 = new long[n];    
long* inputArray2 = new long[n];

不要忘记在main的末尾删除它。

您可以使用新的:

long* inputArray1 = new long[n];    
long* inputArray2 = new long[n];



别忘了在main的末尾删除它。

看起来像堆栈溢出。使用
std::vector
而不是本机数组。请附加代码。您所说的“该.exe文件停止工作”到底是什么意思它崩溃了?永远不会结束?等等。它崩溃了我已经附加了代码,或者如果你不想使用
std::vector
分配新的数组并在最后删除它们。看起来像是堆栈溢出。使用
std::vector
而不是本机数组。请附加代码。你所说的“.exe文件停止工作”到底是什么意思它崩溃了?永远不会结束?等等。它崩溃了我已经附加了代码,或者如果你不想使用
std::vector
分配新的数组并在最后删除它们。看起来像是堆栈溢出。使用
std::vector
而不是本机数组。请附加代码。你所说的“.exe文件停止工作”到底是什么意思它崩溃了?永远不会结束?等等。它崩溃了我已经附加了代码,或者如果你不想使用
std::vector
分配新的数组并在最后删除它们。看起来像是堆栈溢出。使用
std::vector
而不是本机数组。请附加代码。你所说的“.exe文件停止工作”到底是什么意思它崩溃了?永远不会结束?等等。它崩溃了我已经附加了代码,或者如果你不想使用
std::vector
分配新的数组,并在最后删除它们。谢谢你的回答。但是除了使用向量,还有其他方法吗?因为我对它不太熟悉。@DushaniWellappili是的,将它设为static.variable长度数组在标准C++中是有效的,因为C++ 11或C++ 14现在不确定。@任务感谢。是的,它在C++ 11中是有效的。also@DushaniWellappili我还没有检查过C++14,但肯定不是C++11,一些编译器支持它作为扩展。谢谢你的回答。但是除了使用向量,还有其他方法吗?因为我并不熟悉用它来做。“标准”的“长”数组在标准C++中是有效的,因为C++ 11或C++ 14现在不确定。@任务感谢。是的,它在C++ 11中是有效的。also@DushaniWellappili我还没有检查C++14,但肯定不是C++11,一些编译器支持它作为扩展。谢谢你的回答。但是还有其他方法吗ER C++使用向量?因为我并不熟悉C++。@ DuhaniWelAppLi是的,使它静态。C++中11或C++ 14的可变长度数组在标准C++中是有效的。@任务感谢。是的,它在C++ 11中是有效的。also@DushaniWellappili我还没有检查过C++14,但肯定不是C++11,一些编译器支持它作为扩展。谢谢C++的回答。但是除了使用C++以外,还有其他方法吗?因为我并不熟悉C++。@ DuhaniWelAppLi是的,使它静止。可变长度数组在标准C++中是有效的,因为C++ 11或C++ 14现在不确定。@任务感谢。是的,它在C++ 11中是有效的。also@DushaniWellappili我还没有检查C++14,但是它很可能不是C++11,有些编译器支持它作为扩展。@DushaniWellappili-只是好奇,但是100万个长的插入排序似乎需要很长时间,你为此花了多少时间?是的。这需要很多时间。我得到了