发布网友 发布时间:2022-04-26 14:10
共2个回答
热心网友 时间:2022-06-28 22:33
public static void insertSort(int[] data, int num) {
int left, right;
int middle, j;
// 准备
left = 0;
right = data.length - 2;
// 二分法查找插入位置
while (right >= left) {
// 指向已排序好的中间位置
middle = (left + right) / 2;
if (num < data[middle])
right = middle - 1;// 插入的元素在右区间
else
left = middle + 1; // 插入的元素在左区间
}
// 后移排序码大于R[i]的记录
for (j = data.length - 2; j >= left; j--) {
data[j + 1] = data[j];
}
// 插入
data[left] = num;
}
public static void main(String[] args) {
int[] data1 = { 1, 2, 5, 7, 8, 9, 13, 0 };// 预留一位给需要排序插入的使用
//insertSort(data1, 0);
insertSort(data1, 6);
//insertSort(data1, 14);
for (int i = 0; i < data1.length; i++) {
System.out.println(data1[i]);
}
}
热心网友 时间:2022-06-28 22:33
public class Test1 {
public static void main(String[] args) {
int[] a={1,3,4,5,6,8,10};
insert(a,2,0,a.length-1);
}
public static void insert(int[] a,int b,int start,int end){
int mid =(start+end)/2;
if(a[start]==b){
System.out.println("已存在位置:"+(start+1));
}else if(a[end]==b){
System.out.println("已存在位置:"+(end+1));
}else{
if(b==a[mid]){
System.out.println("已存在 位置:"+(mid+1));
}else if(b<a[mid]){
if(b>a[mid-1]){
System.out.println("应插入的位置是:"+(mid+1));
//插入方法调用
}else{
end=mid;
insert(a,b,start,end);
}
}else if(b>a[mid]){
if(b<a[mid+1]){
System.out.println("应插入的位置是:"+(mid+2));
//插入方法调用
}else{
start=mid;
insert(a,b,start,end);
}
}
}
}
}
--------------- 以上是代码 插入的方法自己写一下,在需要插入的地方调用一下, 插入的思路:遍历数组,把插入位置之后的数组向后移动一位。
不懂的再问我..