版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z249486888/article/details/83821774
数组中查找元素的方式有两种:1、基本查找:适用于数组元素无序
2、二分查找(折半查找):适用于数组元素有序
思想:1、定义最小索引值,最大索引值并计算出中间索引值。
2、判断中间索引值是否等于需要查找的值:A、等于 B、不等于
3、当A情况时,返回该索引值
4、当B情况时,判断中间索引值与需要查找的值的关系 A、大于 B、小于
5、当A情况时,最小索引值不变,最大索引值等于中间索引值减1,然后再回到第2条。
6、当B情况时,最大索引值不变,最小索引值等于中间索引值加1,然后再回到第2条。
public static void main(String[] args) {
int[] a = { 1, 3, 5, 12, 24, 34, 56, 78, 79, 89 };
int vaule = 79;
System.out.println(GetIndex(a, vaule));
}
static int GetIndex(int[] a, int vaule) {
int min = 0;//定义最小索引
int max = a.length;//定义最大索引
int mid = (min + max) / 2;//计算中间索引
while (a[mid] != vaule) {
if (a[mid] > vaule) {//中间索引对应的值大于需要查找的值
max = mid - 1;
mid = (max + min) / 2;
} else if (a[mid] < vaule) {//中间索引对应的值小于需要查找的值
min = mid + 1;
mid = (max + min) / 2;
}
if (min > max) { //判断是否存在该值
return -1;
}
}
return mid;
}
注意:当所数组中不存在需要查找的值时应该怎么判断?
当不存在该值时,最小索引min的值无限加1,最大索引max的值无限减1。则当min>max时即说明不存在该值。