C++ 输入文件的计数排序

C++ 输入文件的计数排序,c++,sorting,file-io,counting-sort,C++,Sorting,File Io,Counting Sort,我有我的计数排序来处理我用数字填充的数组。现在我想让它,所以我采取的信息从一个输入文件。我将有大量的数字输入文件(从0到4000)。我还将有在该文件中的项目数量给我。如何调整此代码以适用于任何输入文件 int array[10]={5,5,5,5,5,5,1,2,5,7}; int count_array[10]={0}; int sum=0; int new_array[10]; int i; for(i=0;i<10;i++)

我有我的计数排序来处理我用数字填充的数组。现在我想让它,所以我采取的信息从一个输入文件。我将有大量的数字输入文件(从0到4000)。我还将有在该文件中的项目数量给我。如何调整此代码以适用于任何输入文件

    int array[10]={5,5,5,5,5,5,1,2,5,7};
    int count_array[10]={0};
    int sum=0;
    int new_array[10];
    int i;

    for(i=0;i<10;i++)
        count_array[array[i]]++;

    for(i=0;i<10;i++)
    {
        count_array[i]=count_array[i]+sum;
        sum=count_array[i];
    }

    for(i=0;i<10;i++)
    {
        new_array[count_array[array[i]]]=array[i];
        count_array[array[i]]--;
    }

    for(i=1;i<=10;i++)
    {
        cout<<new_array[i]<<" ";               
    }
    cout<<endl;
int数组[10]={5,5,5,5,5,1,2,5,7};
int count_数组[10]={0};
整数和=0;
int新_数组[10];
int i;

对于(i=0;i,如果您处理的是整数,并且您确定在您的情况下的范围是0-4000

然后,您可以安全地忽略计数排序,并执行类似计数频率的操作,最终将对文件中的整数进行排序

请参阅下面的代码,它在
常量空间(4001*siz4eof(int))
θ(N)
时间中对输入进行排序

#include <fstream>
#include <iostream>
#include <string>
#include <cstring>
#include <cassert>

#define MAX_VALUE 4001

int main()
{
    std::ifstream in("D:\\cprog\\file.txt");
    std::string line;
    int arr[MAX_VALUE];
    memset(arr,0,sizeof(arr));
    while(std::getline(in,line))
    {
        int a = std::stoi(line);
        assert(a<MAX_VALUE);
        arr[a] += 1; // counting frequency of a number
    }
    std::cout<<"Sorted result"<<'\n';
    for(int i = 0; i < MAX_VALUE ; ++i)
    {
        for(int j = 0 ; j < arr[i] ; ++j)
            std::cout<<i<<'\n';
    }
    return 0;
}
#包括
#包括
#包括
#包括
#包括
#定义最大值4001
int main()
{
std::ifstream in(“D:\\cprog\\file.txt”);
std::字符串行;
int arr[最大值];
memset(arr,0,sizeof(arr));
while(std::getline(in,line))
{
INTA=std::stoi(直线);

assert(aDid)您是否试图找出如何读取文件?我知道我将使用CIN。逻辑的可能副本将是相同的,只是count_数组的大小将是4001(因为范围是0到4000)。此外,不必将数字从一个数组移动到另一个新的数组,可以跳过求和循环,使用双循环填充新的数组,为count_数组中的每个元素写入count_数组[i]i实例。如果输入大小>>4000(即输入大小与4000相比非常大),则应根据预期数据做出决定计数排序是一种可行的选择,否则快速排序是一种可行的方法