最合适的排序算法

lab*_*nth 2 c sorting algorithm data-structures

我有一个哈希表,可能包含大约1-5百万条记录.我需要迭代它来选择其中的一些条目,然后按某种顺序对它们进行排序.我打算使用链表来维护一个指向哈希表中条目的指针列表,我必须对其进行排序.但是使用链表,我遇到的唯一可用的排序选项是合并排序.但考虑到列表可能包含大约500万条记录,是否应该使用合并排序?我没有限制只使用链表来维护指针列表.我也可以使用数组,以便我可以使用堆排序.但是考虑到这个完整的操作非常频繁并且它的不同实例可以并行运行,决定这个数组的大小将是一项具有挑战性的任务.此外,从哈希表中筛选出来的用于排序的条目数可以从hastable中的1到几乎所有记录变化.有人可以建议我最适合的方法吗?

unw*_*ind 6

首先尝试最简单的方法:

  1. 实现典型的动态数组,realloc()用于增长,也许使用典型的双分配时增长方案.增加到一百万个元素将需要大约20个重新分配.
  2. 用数组排序qsort().

然后对其进行分析,并查看它在哪里受伤.如果您对内存不敏感,请增加阵列的初始分配.

  • 只要数组适合物理内存(即不通过虚拟内存管理器交换到磁盘),这种方法就可以正常工作.20个12MB的数组是0.25GB,所以除非你已经在内存的极限附近运行,否则这应该不是问题. (2认同)