V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wuxqing
V2EX  ›  问与答

大数据量排序有没有非常快的算法?

  •  
  •   wuxqing · 2014-05-01 10:23:12 +08:00 · 3917 次点击
    这是一个创建于 3857 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据结构:
    [[1, 111], [2, 201], [3, 211], [4, 111], [5, 201], ...]
    第一个值是连续的,int32类型
    第二个数是有重复的,int16类型
    根据第二个值进行排序
    数据量在1000万

    想不到好思路
    7 条回复    2014-05-04 10:35:01 +08:00
    yangff
        1
    yangff  
       2014-05-01 10:33:43 +08:00
    1kW快排就行了。i7的话大概1~2秒就出来了吧。
    wlxiong
        2
    wlxiong  
       2014-05-01 10:38:05 +08:00 via Android
    1) 因为第二个值是int16那么最多64*1024种数值 可以考虑建一个类似hash array的结构 可以做到 O(n)
    2) 或者考虑做radix sort
    66CCFF
        3
    66CCFF  
       2014-05-01 13:47:27 +08:00
    第二个元素int16的话,用桶排吧。
    0~65535做桶,每个桶拉一个链下去存第一个元素,O(1)插入。参考链式前向星。
    复杂度O(n)
    riaqn
        4
    riaqn  
       2014-05-01 13:52:08 +08:00 via iPhone
    同意楼上
    wuxqing
        5
    wuxqing  
    OP
       2014-05-04 10:31:11 +08:00
    @yangff 是低端安卓设备上用,快排速度不行
    wuxqing
        6
    wuxqing  
    OP
       2014-05-04 10:33:40 +08:00
    @wlxiong 不知道第二个值对应有多少ID,hash array不好处理
    wuxqing
        7
    wuxqing  
    OP
       2014-05-04 10:35:01 +08:00
    @66CCFF 桶排在用,由于设备比较低端,性能还是差了些
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1086 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:55 · PVG 02:55 · LAX 10:55 · JFK 13:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.