用java把两个有序的数组合并为一个有序的数组,帮我把程序看下哪里出错了?

public class Merge {
private int[] hebing(int a[], int b[]) {
int c[] = new int[a.length + b.length];
int adex = 0,bdex = 0,cdex = 0;
while (adex<=a.length&&bdex<=b.length) {
if (a[adex]<=b[bdex]) {
c[cdex] = a[adex];
adex++;
}else {
c[cdex] = b[bdex];
bdex++;
}
cdex++;
}
if (adex==a.length) {
for (int i = adex; i < c.length; i++) {
c[adex] = b[bdex];
}
}else {
for (int i = bdex; i < c.length; i++) {
c[bdex] = a[adex];
}
}
return c;
}

public static void main(String[] args) {
int a[] = new int[] { 2, 5, 8, 11, 22, 50, 80 };
int b[] = new int[] { 1, 3, 4, 12, 33, 40, 88 };
Merge merge = new Merge();
int c[] = merge.hebing(a, b);
for (int i = 0; i < c.length; i++) {
System.out.print(c[i] + " ");
}
}
}

首先是while (adex<=a.length&&bdex<=b.length) 这里adex超出a的大小了,bdex也是,不应该有=, 第二个问题是,a或b没全部放进c时,你的逻辑错了,应该下面这样做就没问题了,自己琢磨琢磨吧
private int[] hebing(int a[], int b[]) {
int c[] = new int[a.length + b.length];
int adex = 0,bdex = 0,cdex = 0;

while (adex<a.length&&bdex<b.length) {
if (a[adex]<=b[bdex]) {
c[cdex] = a[adex];
adex++;
}else {
c[cdex] = b[bdex];
bdex++;
}
cdex++;
}
if (bdex<b.length) { //a全部放进c了,而b没有放完
for (int i = bdex; i < b.length; i++) {
c[cdex] = b[bdex];
cdex++;
}
}else if (adex<a.length){ //b全部放进c了,而a没有放完
for (int i = adex; i < a.length; i++) {
c[cdex] = a[adex];
cdex++;
}
}
return c;
}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答