C++ 输入文件的计数排序
我有我的计数排序来处理我用数字填充的数组。现在我想让它,所以我采取的信息从一个输入文件。我将有大量的数字输入文件(从0到4000)。我还将有在该文件中的项目数量给我。如何调整此代码以适用于任何输入文件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++)
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相比非常大),则应根据预期数据做出决定计数排序是一种可行的选择,否则快速排序是一种可行的方法