5.折半查找
只针对有有序数组
定义三个指针,一个代表开头,一个代表末尾,一个代表中间值.
假设数组从小到大,因为有序,如果数值小于中间数,那么这个数只可能存在于中间数的左边,结尾指针移动到中间指后一位,针反这则在右边,每比完一轮,数少一半,没有找到再比,最终开头下标大于到最后都没有找到.则结束.
public static void reduceSort(int[] arr,int x)
{
int start=0,end =arr.length-1,mid=(start+end)/2;
while (start<=end)
{
if (x==arr[mid])
{
System.out.println(mid);
}
if (x<arr[mid])
{
end=mid-1;
mid=(start+end)/2;
}
if (x>arr[mid])
{
start=mid+1;
mid=(start+end)/2;
}
}
if (start>end)
{
System.out.println("数组里没有这个数");
}
} |