在一组有序数组中进行查找指定数及对应下标,再插入指定数,最后删除指定数。
代码如下:
package com.homework.lhh;
import java.util.Arrays;
import java.util.Scanner;
public class Ex09 {
@SuppressWarnings("resource")
public static void main(String[] args) {
int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// 定义一个排序数组
int findIndex = -1;// 指定数在数组中的位置
int start = 0;// 起点索引
int end = array.length - 1;// 终点的索引
int middle;// 中心点的索引(此处可以暂时不计算,在循环中计算赋值)
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
// 查找
System.out.println();
System.out.print("请输入一个指定查找的数:");
Scanner sc = new Scanner(System.in);
int findNumber = sc.nextInt();
while (start <= end) {
middle = (start + end) / 2;
if (findNumber > array[middle]) {
start = middle + 1;
} else if (findNumber < array[middle]) {
end = middle - 1;
} else {
findIndex = middle;// 找到指定数
break;
}
}
if (findIndex == -1) {
System.out.println(findNumber + " 不存在该数组中!");
} else {
// 找到
System.out.println(findNumber + " 在数组中,它的下标为 :" + findIndex);
}
// 插入指定数
System.out.print("请输入一个指定插入的数:");
int addNumber = sc.nextInt();
array = Arrays.copyOf(array, array.length + 1);// 数组扩容
array[array.length - 1] = addNumber; // 暂时将数组的最后一个数赋值为插入的数
Arrays.sort(array);// 再次排序
System.out.print("插入一个指定数之后的数组为:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
// 删除
System.out.println();
System.out.print("请输入一个指定删除的数:");
int delNumber = sc.nextInt();
// int newLength = 0; //定义新的长度
for (int i = 0; i < array.length; i++) {
if (array[i] == delNumber) {
// 重新定义数组的下标
for (int j = i; j < array.length - 1; j++) {
array[i] = array[j + 1];
}
array = Arrays.copyOf(array, array.length - 1);// 数组减容量
// newLength++;
}
}
Arrays.sort(array);
System.out.print("删除一个指定删除的数后数组为:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
}
}
运行结果如图: