二分法查找的前提是数组必须排序!!!
二分法查找的前提是数组必须排序!!!
二分法查找的前提是数组必须排序!!!
二分法查找:依次将所查的数据与中心数据进行对比,根据大小调整数据边界。
具体来讲,如果所查数据小于中间的数据,那么说明所查数据在中间数据的左侧,那么将查询范围缩小到开始与中心数据之间,如果所查数据大于中心数据,那么说明所查数据在中心数据右侧,那么将查询范围缩小到中心数据与结尾数据之间。重复此过程,直到找到该数据为止。
二分法查找的代码实现:
/**
* 二分法查找
* @return
*/
private void twoPointQuery() {
int[] source = {1, 2, 3, 6, 7, 8, 10};
//查找6的索引
int num = 12;//要查找的数字
int start = 0;//查找的起始角标
int end = source.length - 1;//查找的结尾角标
int mid = (start + end) / 2;//查找的中间角标
while (num != source[mid]) {
if (source[mid] > num) {
end = mid - 1;
} else if (source[mid] < num) {
start = mid + 1;
}
//防止死循环
if (start>end){
mid=-1;// -1代表没有这个数字
break;
}
mid = (start + end) / 2;
}
// 循环结束的时候,mid的值即为要查找的角标值
Log.d("======", "要查找的num的角标为: "+mid);
}
网友评论