大文件,5亿整数,怎么排?

问题

给你1个文件bigdata,大小4663M,5亿个数,文件中的数据随机,如下一行一个整数:

6196302
3557681
6121580
2039345
2095006
1746773
7934312
2016371
7123302
8790171
2966901
...
7005375

现在要对这个文件进行排序,怎么搞?


内部排序


先尝试内排,选2种排序方式:

3路快排:


private final int cutoff = 8;

public <T> void perform(Comparable<T>[] a) {
        perform(a,0,a.length - 1);
    }

    private <T> int median3(Comparable<T>[] a,int x,int y,int z) {
        if(lessThan(a[x],a[y])) {
            if(lessThan(a[y],a[z])) {
                return y;
            }
            else if(lessThan(a[x],a[z])) {
                return z;
            }else {
                return x;
            }
        }else {
            if(lessThan(a[z],a[y])){
                return y;
            }else if(lessThan(a[z],a[x])) {
                return z;
            }else {
                return x;
            }
        }
    }

    private <T> void perform(Comparable<T>[] a,int low,int high) {
        int n = high - low + 1;
        //当序列非常小,用插入排序
        if(n <= cutoff) {
            InsertionSort insertionSort = SortFactory.createInsertionSort();
            insertionSort.perform(a,low,high);
            //当序列中小时,使用median3
        }el
  • 12
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值