我试图编写一个采用排序数组和整数的方法,创建一个大1个大小的新数组,然后插入新的整数并保持排序。
我已经尝试了一些不同的实现并让它们起作用 - 但对于这个特定的实现,我无法掌握它出错的地方。
int[] array1 = new int[]{1, 2, 3, 4, 6, 7, 8};
int[] printArray = insert(array1, 5);
是数组,方法是
public static int[] insert(int[] a, int k) {
int[] s = new int[a.length + 1];
for(int i = 0; i < a.length; i++) {
if(k < s[i]) {
s[i] = k;
for(int j = i + 1; j < s.length; j++) {
s[j] = a[i];
i++;
}
return s;
} else {
s[i] = a[i];
}
}
return s;
}
此方法打印出1,2,3,4,6,7,8,0,而不是1,2,3,4,5,6,7,8。
答案 0 :(得分:4)
更改
if(k < s[i]) {
到
if(k < a[i]) {
第4行。
答案 1 :(得分:0)
实际上,在以下行中,您将创建一个所有元素为零的数组:
int[] s = new int[a.length + 1];
s[0]
至s[7]
将为0
。
您的循环计数器i
从0
到a.length
,但要注意的是数组s
的所有元素都将为零。您正在将k
与s[i]
进行比较,该值为零,因此数组的移位永远不会发生(如果块永远不会执行)。
你需要做两件事来解决它。
s
的值初始化a[0]
的元素零。最终代码是:
public static int[] insert(int[] a, int k) {
int[] s = new int[a.length + 1];
s[0] = a[0];
for(int i = 1; i < a.length; i++) {
if(k < s[i-1]) {
s[i] = k;
for(int j = i + 1; j < s.length; j++) {
s[j] = a[i];
i++;
}
return s;
} else {
s[i] = a[i];
}
}
return s;
}
现在你会得到:
[1, 2, 3, 4, 6, 5, 7, 8]