将整数插入到已排序的数组中

时间:2015-09-22 03:58:13

标签: java arrays sorting

我试图编写一个采用排序数组和整数的方法,创建一个大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。

2 个答案:

答案 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

您的循环计数器i0a.length,但要注意的是数组s的所有元素都将为零。您正在将ks[i]进行比较,该值为零,因此数组的移位永远不会发生(如果块永远不会执行)。

你需要做两件事来解决它。

  1. 使用s的值初始化a[0]的元素零。
  2. 将元素与上一个元素进行比较,找出要插入的位置。
  3. 最终代码是:

    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]