Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 函数以排序方式在数组中插入整数_Java_Arrays_Sorting_Integer - Fatal编程技术网

Java 函数以排序方式在数组中插入整数

Java 函数以排序方式在数组中插入整数,java,arrays,sorting,integer,Java,Arrays,Sorting,Integer,假设我从一个数组[0,0,0,0]开始。在这个数组中,我将正好添加4个值。比方说2,1,3,4。因此,我的主要功能如下所示: public static void main(String[] args) { int[] arr = new int[4]; insertSortedInArr(2,arr); insertSortedInArr(1,arr); insertSortedInArr(3,arr); ins

假设我从一个数组[0,0,0,0]开始。在这个数组中,我将正好添加4个值。比方说2,1,3,4。因此,我的主要功能如下所示:

 public static void main(String[] args) {
        int[] arr = new int[4];
        insertSortedInArr(2,arr);
        insertSortedInArr(1,arr);
        insertSortedInArr(3,arr);
        insertSortedInArr(4,arr);
    }
我尝试了一个方法
insertSortedInArr()
的实现,我在网上也找到了这个方法,但它不太管用。我试图找出它出了什么问题,但我没能找到错误。方法如下:

 public static void insertSortedInArr(int val,int[] arr){
        int i;
        for(i=0;i<arr.length-1;i++){
            if (arr[i] == 0){
                arr[i] = val;
                return;
            }
            if (val < arr[i])
                // value must be inserted in arr[i]
                break;
        }
        // move everything right
        for(int k=i; k<arr.length-1; k++){
                arr[k+1]=arr[k];
        }
        arr[i]=val;
    }
public static void insertSortedInArr(int val,int[]arr){
int i;

对于(i=0;i而言,问题在于“将所有内容正确移动”部分

您正在从左到右迭代,但这将覆盖下一个元素

相反,从右到左迭代:

for (int k=arr.length-1; k > i; k--){
    arr[k]=arr[k - 1];
}

既然您已经知道了这些值,我想这里甚至不需要循环。我们可以执行以下操作:

public static void insertSorted(int val, int arr[]) {
    if(arr[val - 1] == 0) { 
        arr[val-1] = val;
    }
}
或者更好,只需将值以随机顺序插入数组,并使用

Arrays.sort(arr);

希望能有所帮助。

在检测第一个自由元素时,可能会有一些小的改进,其中可用值应该被移动:

public static void insertSortedInArr(int val,int[]arr){
int i;
对于(i=0;ii;k--){//将元素向右移动到第一个自由单元
arr[k]=arr[k-1];
}
打破
}
}
arr[i]=val;
System.out.println(Arrays.toString(arr));
}
测试:

int[]arr=newint[4];
插入式分拣机(4,arr);
插入式分拣机(2,arr);
插入式分拣装置(1,arr);
插入式分拣机(3,arr);
输出:

[4, 0, 0, 0]
[2, 4, 0, 0]
[1, 2, 4, 0]
[1, 2, 3, 4]

这不太可能有帮助,因为在第一种情况下,数组将被取消排序,因为它可能看起来像[0,2,0,0],[0,2,0,4];在第二种情况下,零值将向前移动:[0,0,0,2],[0,0,2,4]请查找下面的过程,过程0:[0,0,0,0]过程1:[0,2,0,0]过程2:[1,2,0,0]过程3,0]过程4:[1,2,3,4]是的,对于每个中间步骤,数组都是未排序的,正如您应该能够看到的。对。我认为最终结果是排序的数组。很高兴您提到这一点。