数组元素查找之二分查找/折半查找
提示:用这个的话,数组中的元素需满足从低到高已经排序好的条件(这个可以用冒泡等排序来完成)
例子代码:
package 二分查找;
/**
* @author 邓雪松 (づ ̄ 3 ̄)づ)
* @create 2021-10-21-18-21
*/
public class Demo {
public static void maopao(int[] num){
int temp;
for(int i=0;i<num.length;i++){
for(int n=0;n<num.length-1-i;++n){
if(num[n]>num[n+1]){
temp=num[n];
num[n]=num[n+1];
num[n+1]=temp;
}
}
}
}
public static void main(String[] args) {
int[] nums = {11,19,12,16,13,17,14};
//用冒泡排下序
maopao(nums);
//检测排序是否成功
for(int i=0;i<nums.length;i++){
System.out.print(nums[i]+"\t");
}
//
int key = 13;//要查找的数
int max = nums.length-1;//最大值的下标
int min = 0;//最小值的下标
int mid = -1;//中间值索引
//使用二分查找法查找(注意循环的条件->提示最多是:min==max==mid的时候如果再找不到必然min>max或者max<min->一样)
while(min<=max) {
mid = (max + min) / 2;
if (nums[mid] > key) {
//说明:想要查找的数再左边
//需要重新赋值max的值
max = mid - 1;
} else if (nums[mid] < key) {
//说明:想要查找的数再右边
//需要重新赋值min的值
min = mid + 1;
}else if(nums[mid] == key){
break;
}
}
if(min>max){
System.out.println("这个数不存在数组中");
}else{
System.out.println("这个数存在数组中是第"+(mid+1)+"个~");
}
}
}