Java练习:分治法之合并排序(merge Sort)

返回 Java编程练习目录


分而治之(divide-and-conquer)是一种古老但实用的策略、普适性的问题求解策略。本质上,分而治之策略是将整体分解成部分的思想。

按照系统科学的观点,该策略仅适用于线性系统——整体正好对于部分之和

(两路)合并排序遵循分治法的三个步骤,其操作如下:

(1) 分解:将数组大致分成两半。例如将9个元素的数组划分成5+4两半。

(2) 排序:一般需要对子序列递归地再进行划分。极端地,子序列仅仅剩下一个数据,则子序列不需要排序。以突出前后两个步骤。实际程序,划分是有度的。

(3) 合并:将两个已排序的数据序列合并。

1.合并

[5.1.2 针对LinearList]的例程5-3归并(merging)算法,解决的问题:已知la和lb的元素非降序排列(前面的元素小于等于后面的元素),将la和lb合并为lc,且lc中的元素非降序排列。

    public static void merge(LinearList la, LinearList lb,LinearList lc){
        if(la==null || lb==null|| lc==null){
            throw new java.lang.NullPointerException();
        }
        lc.clear();
        int i=0; int j=0;
        while( (i<=la.length())&&(j<=lb.length()) ){
            int ai=la.getAt(i);
            int bj=lb.getAt(j);
            if(ai<=bj){
                lc.add(ai);
                i++;
            }else{
                lc.add(bj);
                j++;
            }            
        }
        while( i<=la.length() ){
            int ai=la.getAt(i++);
            lc.add(ai);
        }
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值