二分查找的用处
Posted 一只学编程的小猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找的用处相关的知识,希望对你有一定的参考价值。
前几日面试金山WPS,在准备的期间看到了19年有这么一个题:
给你一组水球,从一栋100层楼高的地放扔下去,水球在下落过程中会自行爆炸,要求用最少的次数得出水球是在下落几层后爆炸的。
其实这题就是二分查找的一个变形,要进行二分查找有一个要求:数组已经是排好序的。
那么我们看看这题,楼层的编号在默认之中就已经排好序了;题目的意思就是在1到100间,查找一个数。
下面献上源码:
int found_time = 0;
void binary_search(int int_array[], int index_min, int index_max, int aim_num)
{
found_time++;
int index_mid = (index_min + index_max) / 2;
if(int_array[index_mid] > aim_num)
{
binary_search(int_array, index_min, index_mid, aim_num);
}
else if(int_array[index_mid] < aim_num)
{
binary_search(int_array, index_mid, index_max, aim_num);
}
else
{
std::cout << "found it. time:" << found_time << ", value:" << int_array[index_mid] << std::endl;
return;
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
int int_array[100];
for(int i = 0; i < 100; i++)
{
int_array[i] = i + 1;
}
binary_search(int_array, 0, 99, 5);
return a.exec();
}
看看结果:
这题我看当时好几个人回答的,都没有提到二分查找。如果这题直接说这是一个二分查找,估计大家都会知道怎么做,但是变个形就不会了,学算法还是不要因为要考算法而去学习算法,那样最多是在背题,这就好比高中的时候背数学题一样,不可能都背的下来的,还是需要平时的积累。
以上是关于二分查找的用处的主要内容,如果未能解决你的问题,请参考以下文章