两个升序表,合并生成第三个升序表。
我们使用3个类实现功能。
SxbSX类生成顺序表并遍历打印,如下:
public class SxbSX {
int elem[];
int length;
SxbSX(){ //构造函数
elem=new int [100];
length=0;
}
void display()//遍历
{
for(int i=0;i<length;i++){
System.out.print(elem[i]+" ");
}
System.out.print(" ");
}
}
SxbHB类是核心代码,开始尝试for实现逐个比较输出到LC,但是失败了。。
public class SxbHB {
//先预定三个顺序表
SxbSX LA,LB,LC;
SxbHB()
{
}
void merge() throws Exception
{
int i=0;
int j=0;
SxbSX LA=new SxbSX();
LA.length=5;
LA.elem[0]=12; LA.elem[1]=23; LA.elem[2]=34; LA.elem[3]=45; LA.elem[4]=56;
SxbSX LB=new SxbSX();
LB.length=5;
LB.elem[0]=1; LB.elem[1]=2; LB.elem[2]=3; LB.elem[3]=4; LB.elem[4]=5;
SxbSX LC=new SxbSX();
LC.length=10;
//发现for循环行不通,有点复杂,不够灵活
/* for(int x=0;x<LA.length;){
* for(int y=0;y<LB.length;){
* for(int k=0;k<10;k++){
* if(LA.elem[i]>LB.elem[j])
* {LC.elem[k]=LB.elem[j];j++;}
* else
* { LC.elem[k]=LA.elem[i];i++;}
*
* }
*
* }
*}
*/
int k=0;
while(i<LA.length&&LB.length>j) {
if (LA.elem[i] > LB.elem[j]) {
LC.elem[k++] = LB.elem[j++];
} else {
LC.elem[k++] = LA.elem[i++];
}
}
while(i<LA.length){
LC.elem[k]=LA.elem[i];
i++;
k++;
}
while(j<LB.length){
LC.elem[k]=LB.elem[j];
j++;
k++;
}
LC.display();
System.out.print(" ");
}
}
demon类是主函数:
public class demo6 {
public static void main(String args[]) throws Exception
{
SxbHB SH=new SxbHB();
SH.merge();
}
}
最后是结果截图:
过程对于我这种菜鸟还有点小困难,不过还是稳畅运行了。