无法对包含整数的大文件进行排序

时间:2016-12-20 14:54:45

标签: c++ file sorting data-structures

我的程序应该读取一个包含近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;
}

1 个答案:

答案 0 :(得分:1)

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

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

或同样建议使用矢量。

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