二分法查询思想的前提是:数据是有序的(升序或降序),
如升序:2,3,5,7,30(降序:10,8,6,4,1);
然后将需要查找的数据和数组中长度一半的位置开始比较:
如果相等,则找到目标数据;
如果目标数据小于array[middle],则在数组的前一半中继续查找,这时最大角标为 max=middle-1;
否则就只数组的后一半中继续查找,这时最小的角标为min =middle+1;
这样进行下去直到找到目标数据,如果查找不到,说明数据不存在;
这种算法进行一次查找就能省去一半的数据比较,查找效率较高;
小例子:
如果你要在arr={2,4,32,35,45,52,54}中查找4:
a 首先拿4和这个数组中的最中间的数据arr[3]=35进行比较,
由于4<35,所以第二次比较的时候只需要和arr[3]之前的数据进行比较就行,
因为arr[3]之后的数肯定大于4,4肯定不是在arr [3]之后;
b 第二次就在arr[0]和arr[2]之间查找4;
因为arr[1]=4,这样就找到目标数据了;
|