62,615
社区成员
发帖
与我相关
我的任务
分享
package com.zf.test;
import java.util.Arrays;
public class BinaryInsert {
public static void main(String[] args) {
BinaryInsert bt = new BinaryInsert();
int[] array = new int[]{1 , 3 , 6 , 8, 30 , 49 , 60 , 70 , 83 , 85};
System.out.println(Arrays.toString(array));
array = bt.insert(array , 50);
System.out.println(Arrays.toString(array));
}
public int[] insert(int[] sortArray , int value){
int index = findInsertIndex(sortArray , value , 0 , sortArray.length); //找到插入位置
int[] newArray = new int[sortArray.length + 1];
newArray[index] = value ;
System.arraycopy(sortArray, 0, newArray, 0 , index );
System.arraycopy(sortArray, index, newArray, index + 1 , sortArray.length - index);
return newArray ; //返回新数组
}
//找到value适合插入的位置
public int findInsertIndex(int[] sortArray , int value , int left , int right){
int middleIndex = (right - left) / 2 + left ;
int middleValue = sortArray[middleIndex] ;
if(right - left < 2){
if(value > sortArray[right -1 ])
return right;
else if(value > sortArray[left]){
return left + 1;
}else{
return left;
}
}else if(middleValue < value){
return findInsertIndex(sortArray , value , middleIndex + 1 , right);
}else if(middleValue > value){
return findInsertIndex(sortArray , value , left , middleIndex );
}else{
return middleIndex + 1;
}
}
}
import java.util.Arrays;
public class Hello {
/**
* 在一组有序数中插入一个数
* @param ns 是一个组有序数
* @param value 需要插入到有序数中的数
*/
public static void insert(int[] ns, int value) {
for (int i = 0; i < ns.length; ++i) {
if (ns[i] >= value) { // 找到需要插入的位置
for (int j = ns.length - 1; j > i; --j) {
ns[j] = ns[j - 1];
}
ns[i] = value;
break;
}
}
}
public static void main(String[] args) {
int[] ns = {1, 2, 3, 4, 6, 7, 8};
int value = 5;
System.out.println("Before insert: " + Arrays.toString(ns));
insert(ns, value);
System.out.println("After insert: " + Arrays.toString(ns));
}
}