输入文件的计数排序
Counting Sort for input file
我的计数排序要处理一个用数字填充的数组。现在我想制作它,所以我从输入文件中获取信息。我会有大量数字(从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;
如果您处理的是整数,并且您确信您的情况下的范围是0-4000。
然后,您可以安全地忽略计数排序,并做一些类似于计数频率的事情,最终会对文件中的整数进行排序。
请参阅以下代码,对constant space(4001*siz4eof(int))
和theta(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;
}
计数排序是一个stable sorting technique
,它为像Redix排序算法这样的排序算法提供了基础。
对于纯整数,几乎不要求稳定性。所以你们可以选择上面的技术来快速排序你们的输入。
相关文章:
- 按价格对文件中的产品进行排序
- 如何对文件中数组中的单个列进行冒泡排序?C++
- 使用C++对一个巨大文件中的文本行进行字典式外部排序
- 如何按升序对输入文件中的数字进行排序,并找到它们的范围和中值
- 如何在一个巨大的文本文件中对整数进行排序
- 在排序链表中插入结构并将其写入二进制文件
- 从文件中读取并将其内容放入对象数组中,然后对它们进行排序
- 对包含整数的文本文件进行排序时,必须逐行进行排序
- 在排序文本文件中实现二叉搜索?
- 如何从输入的文本文件中按姓氏字母顺序对图表进行排序?
- 按文件中列表中行的一部分排序
- C++ 从文件中获取数据时使用 strcpy 和 strcmp 按字母顺序对数组进行排序?
- 如何从文件中读取并按类别对它们进行排序
- 如何在大型文本文件中对数字进行排序
- C++ 从文件中读取字符,计算每个字符并进行排序
- 从文件中读取并按字母顺序排序
- 随机化超大文件内容排序的有效方法是什么?
- C 从文件和输出排序的内容中读取
- 如何在C++的排序文件中插入数据
- 编写和打印一个额外的0来排序文件,并从末尾删除节点(单链表)