【发布时间】:2018-04-29 08:59:34
【问题描述】:
大家好,我正在做一个项目,根据给定的标准(姓名或年龄或性别或家乡)对包含大量记录的文件进行排序,并以原始文件的格式写入输出文件。但是,我正在辩论什么是最快的方法。该文件包含以下记录:
Name Age gender hometown
Adam 28 Male New york
Kevin 42 Male Boston
...
我的想法是读取文件并创建结构的链表:
struct record
{
char * SortCriteriaString;
int SortCriteriaInt;
char * Name;
int Age;
char * Gender;
char * Hometown;};
然后根据我从命令行读取的条件对链表进行mersort并存储在结构的SortCriteriaInt或SortCriteriaString成员中。
这是我计划对这个项目做的事情。但是我被要求提出最快的排序器,所以我的问题是:如果不是我上面描述的,那么这个任务最快的数据结构和排序算法是什么?
【问题讨论】:
-
@MitchWheat 但是如果我将排序标准作为命令行中的字符串,我如何访问结构的成员?如果复制到排序标准的行中会变慢,那么为所有情况编写排序函数会更好吗?
-
它真的取决于您稍后会对该结构做什么,但我个人会选择动态数组和快速排序。如果您的文件大小差异很大,那么二叉树可能是一个不错的方法
-
@Fureeish 您好,感谢您的反馈!如果我需要进行归并排序怎么办?链表是一种快速性能的良好数据结构吗?
-
malloc和quicksort最简单最快,应该是选项1。如果你有一台30年前的旧电脑,那么你会发现链表稍微快一点。 -
没有。 Mergesort 是 Linked Lists 的首选,但之所以如此,是因为其他排序要么无法实现,要么对于这种数据结构效率非常低。您最好的平均性能是数组 + 快速排序,但如果您无法使用 Mergesort,请使用这两者中的任何一个。这里的问题在于,Mergesort 除了具有
O(n*log_2(n))的时间复杂度之外,还使用了额外的O(n)空间,因此它在您的“文件中真的效率低下大量记录”。