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