问题1774--二分法查找

1774: 二分法查找

时间限制: 1 Sec  内存限制: 128 MB
提交: 52  解决: 21
[提交] [状态] [讨论版] [命题人:]

题目描述

要从一批已按从小到大顺序排好的数据中查找指定的数,二分法是一种高效的方法。 设这批数存放在数组A[n]中(数组A的第一个元素下标为1),要从中查找数d。则其算法的基本过程是:
(1)设p、q分别为查找范围的左端点和右端点,开始时1→p,n→q;
(2)当未找到所要的数d并且p≤q时,重复(3)~(6)。
(3)用(p+q)div 2计算出p和q的中点m。
(4)如果A[m]就是要找的数d,则输出m并转(8)。
(5)如果A[m]>d,说明d只可能落在A[p]~A[m-1]之间,将m-1赋给q,转(3)。
(6)如果A[m]<d,说明d只可能落在A[m+1]~A[q]之间,将m+1赋给p,转(3)。
(7)如果p>q则输出 找不到信息”Not Found!"。
(8)算法结束。
二分法的基本原理是每次都将查找范围缩小一半再继续查找,因此这种查找方法又称为折半查找、对半查找等。
请你编一个程序,用二分法从一已排好序的数列中找出指定数的位置,若找不到则输出“Not Found!"。

输入

第一行一个整数x。
第二行若干个整数(不超int范围),相邻两个整数之间用一个空格隔开。

输出

一行一个整数,表示x在数列中出现的位置。

样例输入 Copy

40
10 30 40 43 52 80 82

样例输出 Copy

3

来源/分类