使用1 for循环将整数插入到数组中

时间:2015-09-22 05:42:13

标签: java arrays sorting

我正在尝试编写一个接受排序数组和整数的方法,并返回一个新的排序数组,其中整数位于正确的位置。

我试图在不使用动态数组的情况下执行此操作,以及仅使用1 for循环 - 我使用不同的方法。

这是方法:

public static int[] insert(int[] a, int k) {
    int j = 0;
    int[] s = new int[a.length + 1];
    for(int i = 0; i < a.length; i++) {
        if(k < a[i] && j == 0) {
            s[i] = k;
            j++;
        } else {
            s[i + j] = a[i];
        }
    }
    return s;
}

我的测试输入是

int[] array1 = new int[]{1, 2, 3, 4, 6, 7, 8};

我试图插入5。

我对这个特殊方法的问题是,它总是会在插入的整数后设置索引为0.在这种情况下,它会存储和打印

1, 2, 3, 4, 5, 0, 7, 8

而不是

1, 2, 3, 4, 5, 6, 7, 8

由于

3 个答案:

答案 0 :(得分:2)

它没有将索引设置为零,它只是跳过一个索引。当k < a[i]为真时,它会递增i(在for循环中)和j(在j++语句中)。因此,当您下次执行s[i + j] = a[i]时,它将跳过两个位置而不是一个位置。

解决方案是确保在循环的每次迭代中都复制原始数组的值。换句话说,一旦您将k分配给s[i],您就需要将a[i]分配给s[i + 1]。实现此目的的最简单方法是删除else子句并在每次迭代时执行s[i + j]

答案 1 :(得分:0)

您可能想要使用替代方案。而不是使用循环,使用Arrays对象来添加和排序数组。

示例:

public int[] insert(int[] a, int k) {
    // create a copy of int array parameter and add one to the length
    int[] s = Arrays.copyOf(a, a.length + 1);

    // add the second parameter at the end of the new array
    s[s.length - 1] = k;

    // sort the array
    Arrays.sort(s);

    return s;
}

答案 2 :(得分:0)

   public static int[] insertIntoSortedArray(int[] array, int k) {
    int[] newArray = new int[array.length + 1];
    int i = 0;// for array
    int j = 0;// for new array
    boolean inserted = false;
    while (i < array.length) {
        if (!inserted && k < array[i]) {
            newArray[j] = k;
            inserted = true;
        } else {
            newArray[j] = array[i++];
        }
        j++;
    }
    return newArray;
}