100G 数据,只有 100M 内存,怎么排序?

这里写图片描述

100G 数据,按照 100M 内存拆分,然后排序有序的数据,然后写入到 file1,file2…file100。
多路归并。
第一回合:
从 file1,file2,file3…file100.取出第一个数。及最小的。所有的初始指针都是第一行。
m i n 1 = m i n ( min1 = min( min1=min(fil1,$file2,file3…file100);
m i n 1 写 入 到 大 数 据 文 件 。 大 数 据 行 数 指 针 + 1 。 min1 写入到大数据文件。大数据行数指针+1。 min1+1min1 对应的行数指针+1。
第二回合:
从 file1,file2,file3…file100.取出第一个数。及最小的。所有的初始指针都是第一行。
m i n 2 = m i n ( min2 = min( min2=min(fil1,$file2,file3…file100);
m i n 2 写 入 到 大 数 据 文 件 。 大 数 据 行 数 指 针 + 1 。 min2 写入到大数据文件。大数据行数指针+1。 min2+1min2 对应的行数指针+1。

多路归并排序:

function mergeMultiArray($arr)
{
    //初始化参赛 PK 的数据
    40
        foreach($arr as $key => $items)
        {
            //初始化每个参赛的第一个元素
            $idx[$key] = 0;
        }
    $retArr = array();
    $retIdx = 0;
    while(false == empty($arr))
    {
        $min = null;//最小值
        $minKey = null;//最小值得代表队编号
        foreach($arr as $key => $items)
        {
            $tmpIdx = $idx[$key];//参赛代表对当前指针
            $tmpMin = $items[$tmpIdx];//参赛代表对的值
            $tmpKey = $key;//参赛代表对的编号
            if(null == $min || $tmpMin < $min)
            {
                $min = $tmpMin;
                $minKey = $key;
            }
        }
        //写入结果
        $retArr[$retIdx] = $min;
        $retIdx++;
        //或者队伍的指针+1
        $idx[$minKey]++;
        //参赛代表队,队员已经用完了
        if($idx[$minKey] >= count($arr[$minKey]))
        {
            unset($arr[$minKey]);
        }
    }
    return $retArr;
}
$ret = mergeMultiArray(array(array(1,10,100),array(2,30,70),array(4,6,9)));
print_r($ret);

技术交流

CleverCode是一名架构师,技术交流,咨询问题,请加CleverCode创建的qq群(架构师俱乐部):517133582。加群和腾讯,阿里,百度,新浪等公司的架构师交流。【架构师俱乐部】宗旨:帮助你成长为架构师!
在这里插入图片描述

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值