C从文件中排序记录

时间:2017-11-15 23:43:13

标签: c file sorting

大家好我正在研究一个项目,根据给定的标准(名称或年龄或性别或家乡)对包含大量记录的文件进行排序,并以原始文件的格式写入输出文件。但是我正在讨论这样做的最快方法。该文件包含以下记录:

Name Age gender hometown
Adam 28  Male   New york
Kevin 42 Male   Boston
...

我的想法是阅读文件并创建struct的链接列表:

struct record
{   
char * SortCriteriaString;
int SortCriteriaInt;
char * Name;
int Age;
char * Gender;
char * Hometown;};

然后根据我从命令行读取的条件并在结构的SortCriteriaInt或SortCriteriaString成员中存储链接列表。

这是我计划用这个项目做的事情。但我被要求提出最快的分拣机,所以我的问题是:如果不是我上面描述的那个,那么这项任务的最快数据结构和排序算法是什么?

2 个答案:

答案 0 :(得分:0)

对指向结构的指针数组进行排序比对结构的链接列表进行排序要快。如果结构不是太大,那么直接排序结构数组比排序结构指针数组要快,但这意味着如果使用合并排序则使用O(n)空间(临时数组)。

由于您的结构具有指向字符串的指针,因此合并排序应该比快速排序更快。合并排序会有更多的动作,但比快速排序更少,在这种情况下,它主要是移动指针,但必须比较字符串。

为字符串分配最大长度的固定大小的结构可能会更快,以便在排序期间移动字符串。如果字符串不是太大,这将有助于在排序期间缓存局部性。

答案 1 :(得分:0)

一般情况下,您不需要在每个结构实例中列出的排序条件,因此建议删除这两个字段。

最快的排序方式是不必执行“深度复制”。 char*字段指向的每个数据字段。

避免深层复制(甚至避免使用struct实例的简单副本。开发一个指向struct实例的指针数组。 然后实现类似' qsort()'在结构实例的字段中执行比较,实际上只修改指向这些实例的指针。

然后遍历指向结构实例的指针数组遍历排序数组。