我正在扫描一个大型数据源,目前大约有800万个条目,每个条目提取字符串,我想按字母顺序排序。
Currenlty我把它们放在一个数组中,然后使用qsort()
为它们排序索引,效果很好。
但出于好奇,我正在考虑将每个字符串插入到一个数据结构中,当我从数据源扫描它们时,按字母顺序维护它们,部分原因是为了体验它们,部分原因是它会感觉更快而没有扫描完成后等待排序完成( - :
哪种数据结构在C中最直接实现?
更新
为了澄清,我需要执行的唯一操作是插入一个项目并在完成时转储索引,我的意思是对于原始顺序中的每个项目,转储一个整数,表示排序后的顺序。
概要
答案 0 :(得分:3)
二进制搜索树。或者自我平衡搜索树。但是不要指望它们比正确实现的动态数组更快,因为数组具有 更好的引用局部性而不是指针结构。此外,不平衡的BST可能“线性”,因此整个算法变为O( n ²),就像快速排序一样。
答案 1 :(得分:2)
您已经在使用最佳方法。最后排序将比维护在线排序数据结构便宜得多。您可以使用rb-tree获得相同的O(logN),但常量会更糟,更不用说显着的空间开销。
也就是说,如果您不需要支持删除,AVL树和rb-tree更容易实现。左倾rb树可以容纳50行左右的代码。见http://www.cs.princeton.edu/~rs/talks/LLRB/(塞奇威克)
答案 2 :(得分:0)
你可以实现一个更快的排序算法,例如Timsort或其他排序算法,使用nlog(n)最坏的情况,只使用二进制搜索进行搜索,因为如果列表排序,它会更快。
答案 3 :(得分:0)
你应该看看Trie数据结构wikilink 我认为这将满足您的需求