归并排序算法——在归并基础上先分解,逐层合并排序

用递归方法是在每一处进行分解,分解成两组,分别再去分解后进行归并,那么最终不断递归到分解为一个长度的数组,然后去合并,合同方法的同时就进行了比对。

今天提出的方法就是从最小的步长1开始,两两归并(归并的同时也进行了比较),然后再用步长2、步长4……逐渐进行归并,直到排序完成。

下面给出代码

package b.merge;

import java.util.Random;

import static b.merge.MergeSort.merge;

public class SplitAllMerge {
    public static void sort(int [] ints){
        int n = ints.length;
        for(int sz = 1;sz < n;sz = sz + sz){
            for(int lo = 0;lo < n - sz;lo += sz + sz){
                //第一次先1个一组两两比对,第二次2个一组两两比对,第三次4个一组两两比对……
                merge(ints,lo,lo+sz-1,Math.min(lo+sz+sz-1,n-1));
            }
        }
    }

    public static void main(String [] args){
        int [] a = new int[20];
        Random r = new Random();
        for ( int i = 0;i < a.length;i++) a[i] = r.nextInt(200);
        System.out.print("排序前:");
        for(int outprint : a){
            System.out.print(outprint + " ");
        }
        sort(a);
        System.out.print("\n\r排序后:");
        for(int outprint : a){
            System.out.print(outprint + " ");
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值