二分查找
1、二分查找:前提数组元素必须有序
2、 二分查找的思想:
每一次都查中间索引的那个元素,比较大小就能减少一半的元素。
3、注意:二分查找不是找该元素第一次出现的索引。
比如下面这个数组,找4元素的索引,找出来的索引是5
int[] arr = {1,2,3,4,4,4,6,7,8,9,10};
4、基本查询:
从头开始挨个往后找该元素第一次出现的索引。代码如下:
package org.westos.demo;
public class MyTest {
public static void main(String[] args) {
int[] arr = {2,42,124,46,32,7,2,6,89,34,56,67,89,54};
//基本查找:根据元素找他第一次出现的索引
int index = getindex(arr, 7);
System.out.println(index);//输出结果:5
}
private static int getindex(int[] arr,int a){
//基本查找,挨个找,找到就返回
for (int i = 0; i < arr.length; i++) {
if(arr[i]==a){
return i;
}
}
return -1;
}
}
二分查找 :
package org.westos.demo;
public class MyTest1 {
public static void main(String[] args) {
//如果数组元素有序的话,我们要找这个元素的索引,可以使用二分查找。
//二分查找,前提数组元素有序
int[] arr ={2,4,7,9,12,45,67,89,98};
int getindex = getindex(arr, 89);
System.out.println(getindex);//输出结果:7
}
private static int getindex(int[] arr,int a){
//定义最小索引,最大索引,中间索引
int min = 0;
int max = arr.length-1;
int center = (min+max)/2;
while(min<=max) {
if (arr[center] > a) {
max = center - 1;
} else if (arr[center] < a) {
min = center + 1;
} else {
return center;
}
//重新计算中间索引
center=(min+max)/2;
}
return -1;
}
}