当值为:
时,请提及时间复杂度和最佳数据结构来存储这些值我知道当整数在一个小范围内时,Counting sort是首选。
感谢。
修改 对不起,我问了一个不同的问题。实际问题是存储这些值的最佳数据结构,如果整数是电话号码(字符串是名称),然后找到最佳排序算法。
答案 0 :(得分:2)
排序算法wiki链接:Sorting Algorithm Wiki
合并排序和快速排序非常好,在最佳情况下它们是n log n。
答案 1 :(得分:2)
看看: Btrees和red-black trees。
您应该能够找到每个这些的开源实现。 (注意,我假设您要维护一个排序结构,而不是只排序一次而忘记。)
答案 2 :(得分:1)
heap怎么样?相对容易实现,速度非常快。对于字符串,你可以使用Trie和Burst sort这样的东西,它被认为是同类中最快的字符串排序算法。
答案 3 :(得分:0)
对于大多数排序算法,都有一个就地版本,因此一个简单的数组就足够了。对于字符串,您可以考虑http://en.wikipedia.org/wiki/Trie,这可以节省空间。正确的排序算法取决于很多因素,例如:如果结果可能已经排序或部分排序。当然,如果您只有几个不同的值,可以使用Countingsort,Bucketsort等。
答案 4 :(得分:0)
在32位机器上,一百万个整数可以容纳400万字节的数组。 4MB并不是那么多;它将在这个系统的存储器中适应500次(现代标准并没有那么强劲)。除了这些字符串的存储空间外,一百万个字符串的大小相同;对于短字符串,它仍然没有问题,所以将它全部淹没。你甚至可以拥有一个指向结构的指针数组,这些指针包含一个整数和一个字符串的引用;一切都很合适。只有当你处理的数据远远多于那些(例如十亿个项目)时,你需要采取特殊的措施,数据结构。
为了排序那么多东西,选择一个O( n log n )的算法而不是O( n < SUP> 2 )。 O( n )算法仅在您拥有特别紧凑的密钥空间时才有用,这在实践中非常罕见。从集合中选择O( n log n )中的算法是平衡速度和其他良好属性(如稳定性)的问题。
如果您是真的这样做,请使用具有适当索引的数据库,而不是手动执行此操作。