一、首先要先输入一组数,并把它以数组的形式输出。
public static void main(String[] args) {
System.out.println("请输入一组数");
Scanner scanner = new Scanner(System.in);
int arr[] = new int[5];//定义数组的长度
for (int i=0;i<arr.length;i++){
arr[i]=scanner.nextInt();//赋值
}
System.out.println(Arrays.toString(arr));
二、因为使用二分法的前提是有序数组,所以要先对输入的数组进行排序
我采用的是冒泡排序
public static void mysort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {//比较趟数
for (int j = 0; j < arr.length - 1 - i; j++) {//相邻元素比较
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
三、是用二分法进行查找
二分法:前提是有序数组,提高查找效率,找到中间值,用key和中间值比较,小于中间值,取左半部分;大于中间值,取右半部;等于中间值,说明中间值就是key
public static int myBinarySearch(int[] arr, int key) {
int low = 0;//开始
int height = arr.length - 1;//结束
while (low <= height) {
int midindex = (low + height) / 2;//找到中间索引
int minval = arr[midindex];//找到中间值
if (minval > key) {//中间值>key,在左半部分
height = midindex - 1;//开始不变,结束变为中间索引-1
} else if (minval < key) {//中间值<key,在右半部分
low = midindex + 1;//结束不变,开始标为中间索引+1
} else {
return midindex;//中间值就是key
}
}
return -1;//没有找到,返回-1
}
}
完整代码如下:
import java.util.Arrays;
import java.util.Scanner;
public class BinarySearchDemo1 {
public static void main(String[] args) {
System.out.println("请输入一组数");
Scanner scanner = new Scanner(System.in);
int arr[] = new int[5];
for (int i=0;i<arr.length;i++){
arr[i]=scanner.nextInt();
}
System.out.println(Arrays.toString(arr));
BinarySearchDemo1.mysort(arr);//调用自定义方法排序
System.out.println(Arrays.toString(arr));//把数组以字符串形式输出
int index = BinarySearchDemo1.myBinarySearch(arr, 4);//调用自定义方法查找key
System.out.println(index);
}
//自定义方法排序
public static void mysort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
//自定义二分查找
public static int myBinarySearch(int[] arr, int key) {
int low = 0;
int height = arr.length - 1;
while (low <= height) {
int midindex = (low + height) / 2;
int minval = arr[midindex];
if (minval > key) {
height = midindex - 1;
} else if (minval < key) {
low = midindex + 1;
} else {
return midindex;
}
}
return -1;
}
}
测试用例: