我有这两个数组:
数组A[-5,-4,-3,-2,-1,6,7,8,9,10,11]阵列B[-33,-22,-11,44,55,66,77,88]
如您所见,数组A和数组B都已排序。我必须将它们合并到第三个数组(arrayC)中,该数组应该进行排序。(不过我不能使用任何数组排序功能)
这是我的while循环:
int[] c = new int[a.length + b.length];
int aCount = 0;
int bCount = 0;
int cIndex = 0;
while (aCount < a.length && bCount < b.length) {
if (a[aCount] < b[bCount]) {
c[cIndex] = a[aCount];
cIndex++;
aCount++;
}
else {
c[cIndex] = b[bCount];
cIndex++;
bCount++;
}
}
这是我的输出:
[-33,-22,-11,-5,-4,-3,-2,-1,6,7,8,9,10,11,0,0,0]
它一直正常工作,直到达到11,但在那之后,当它应该是44、55、66、77、88时,它只显示0。
我错过了什么?
您只将两个数组合并到到达数组a末尾的点。然后while循环中断。您必须插入另一个数组的剩余值。
int[] tmp = (aCount == a.length ? b : a);
int ct = (aCount == a.length ? bCount : aCount);
for(; ct < tmp.length ; ct++)
c[cIndex++] = temp[ct];
从a
和b
中选择每个元素后,递增相应的索引。当你到达a
的最后一个元素(即a[10]
)时,你再次增加索引,现在aCount
不再小于a.length
。所以你跳过了整个剩下的过程。
在设置值之前,零是c
的默认值。由于您没有设置这些值,因此它们保持为0。
只要一个索引到达数组末尾,循环条件(aCount < a.length && bCount < b.length
)就变为false
。由于只增加循环中的一个索引,这意味着另一个数组中至少有一个元素需要插入到c
。
您也可以添加以下代码来添加缺失的元素:
// add elements missing from first array
while (aCount < a.length) {
c[cIndex] = a[aCount];
cIndex++;
aCount++;
}
// add elements missing from second array
while (bCount < b.length) {
c[cIndex] = b[bCount];
cIndex++;
bCount++;
}