我的程序应该读取一个包含近100万个整数的大文件,并且必须以任何方式对它们进行排序,其中一个小的测试文件包含近100个整数并且它有效但是当我尝试使用大文件时它没有&#39 ; t响应并关闭窗口这是下面的源代码是程序的问题。
void merge(int arr[] , int size , int low , int middle , int high)
{
int temp[size];
for (int i = low; i <= high ; ++i )
{
temp[i] = arr[i];
}
int i = low ;
int j = middle+1 ;
int k = low ;
while (i <= middle && j <= high)
{
if(temp[i] <= temp [j])
{
arr[k] = temp[i];
++i;
}
else
{
arr[k] = temp[j];
++j;
}
++k;
}
while (i <= middle)
{
arr[k] = temp[i];
++k;
++i;
}
}
void mergeSort(int arr[] , int size , int low , int high)
{
if(low < high)
{
int middle = (low + high) / 2;
mergeSort(arr , size , low , middle);
mergeSort(arr , size , middle+1 , high);
merge(arr, size , low , middle , high );
}
}
int main()
{
vector<int> intVector;
string line_;
ifstream file_("int.txt");
while(getline(file_,line_,'\t'))
{
int result = atoi(line_.c_str());
intVector.push_back(result);
}
cout << endl;
int numberOfTopItems ;
cout << "plz enter how many big numbers u want " << endl;
cin >> numberOfTopItems ;
const int size = intVector.size();
int* intArray = &intVector[0];
int numberOfLines = intVector.size();
mergeSort(intArray, size, 0 , numberOfLines - 1);
int count = 0;
for (int j = numberOfLines - 1 ; count < numberOfTopItems ; j--)
{
cout << intArray[j] << " ";
count ++;
}
return 0;
}
答案 0 :(得分:1)
@molbdnilo已就此问题发表评论,int temp [size]正在从堆栈中分配太多空间。如果要使用数组,请使用malloc()和free():
int *temp = malloc(size * sizeof(int));
或同样建议使用矢量。
std::vector<int>temp(size);