无法对包含整数的大文件进行分类

Unable to sort a large file containing integers

本文关键字:文件 分类 包含 整数      更新时间:2023-10-16

我的程序应该读取一个大文件包含近100万个整数,并且必须以任何方式对它们进行对处理,我使用一个小型测试文件包含近100个整数,但是当我尝试过它时有了大文件,它没有响应并关闭窗口,这是下面源代码的问题。

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;
}

@molbdnilo已经对此问题进行了评论,int temp [size]正在从堆栈中分配太多空间。如果要使用数组,请使用malloc()和free():

    int *temp = malloc(size * sizeof(int));

或也建议使用矢量。

    std::vector<int>temp(size);