返回 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);
}