赞
踩
返回 Java编程练习目录
分而治之(divide-and-conquer)是一种古老但实用的策略、普适性的问题求解策略。本质上,分而治之策略是将整体分解成部分的思想。
按照系统科学的观点,该策略仅适用于线性系统——整体正好对于部分之和。
(两路)合并排序遵循分治法的三个步骤,其操作如下:
(1) 分解:将数组大致分成两半。例如将9个元素的数组划分成5+4两半。
(2) 排序:一般需要对子序列递归地再进行划分。极端地,子序列仅仅剩下一个数据,则子序列不需要排序。以突出前后两个步骤。实际程序,划分是有度的。
(3) 合并:将两个已排序的数据序列合并。[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);
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。