猜数游戏
问题描述:
给定一个数字,再给N个数字,要从这N个数找出这个给定的数字,最坏的情况,如果一个一个找,要猜N次才能成功。
其实我们没有必要一个一个猜,因为这些数字是有限的而且是有序的(我们给它们排个序),这是一个典型的二分搜索问题。我们可以用折半查找的策略,每次和中间的元素比较,如果比中间的元素小,那么要查找的数字就在左半部分。反之,如果比中间的元素大,那么要查找的元素就在中间元素的右边。
算法设计:
用一个一维数组s[ ]存储数据。
设变量low和high为下界和上界。
middle为搜索范围的中间变量。
x是要查找的数据。
- 初始化。设low=0。high=n-1。
- middle=(low+high)/2。即查找范围的中间元素。
- 判定low<high是否成立,成立转4,不成立,程序结束。
- 判断x与是s[middle]的关系