Java 函数以排序方式在数组中插入整数
假设我从一个数组[0,0,0,0]开始。在这个数组中,我将正好添加4个值。比方说2,1,3,4。因此,我的主要功能如下所示: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
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]是的,对于每个中间步骤,数组都是未排序的,正如您应该能够看到的。对。我认为最终结果是排序的数组。很高兴您提到这一点。