//二分查找
/*
必须是已排完序的数组
每次折半淘汰掉一半的数
需要确定:
最小索引 (0)
最大索引 (由于数组从0开始所以最大索引会是数组长度减一)、
中间值索引 ((最小索引+最大索引) / 2 )
如果最小索引大于最大索引的话则说
明需要查找的数不存在(循环条件)
主要确定中间值,判断需要查找的值是比中间值大或者小,
比中间值大的话取中间值右边的数进行查找(让最小索引值变为中间值+1)、
比中间值小的话取中间值左边的数进行查找(让最大索引值变为中间值-1)
*/
public class BinarySerachTest
{
public static void main(String[] args)
{
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println(serach(array, 2));
}
public static int serach(int[] array, int value)
{
int minValue = 0; //最小索引
int maxValue = array.length - 1; //最大索引
int midValue; //中间值索引
while(minValue <= maxValue) //循环条件,
{
midValue = (minValue + maxValue) / 2; //确定中间值索引
if(array[midValue] == value)
{
return midValue;
}
if(array[midValue] > value)
{
maxValue = midValue-1;
}
if(array[midValue] < value)
{
minValue = midValue+1;
}
}
return -1;
}
}
二分查找
最新推荐文章于 2023-05-28 13:59:52 发布