二分查找
-
二分查找也叫做折半查找,它适用于排列有序的数组的查找。
-
二分查找的基本原理是:对于已经排好序的序列,进过一次比较后,将序列分成两半,然后再在有可能的含有待查找元素部分继续进行查找,继续比较将查找范围缩小,直到找到或者找不到为止。
二分查找过程示意图
相关代码
/**
* arr: 数组对象;
* x: 待查找数;
* low: 起始位置;
* hign: 结束位置;
* mid: 中间位置;
**/
public static int binarySeach(int [] arr,int x,int low,int high)
{
int mid=(low+high)/2;
//如果查找数小于起始位置所对应的数,或者大于结束位置所对应的数,则查找数不存在。
if( x<arr[0] || x>arr[high] )
{
return -1;
}
//如果查找数小于中间位置对应数,说明查找数在左半部分,则结束位置在中间位置前一位。
if( x<arr[mid] )
{
return binarySeach(arr,x,low,mid-1);
}
//如果查找数大于中间位置对应的数,说明它在右半部分,那么起始位置应为中间位置后一位。
else if( x>arr[mid] )
{
return binarySeach(arr,x,mid+1,high);
}
//如果查找数正好为中间位置对应数,则返回中间位置。
else
{
return mid;
}