数据结构-swust-oj-折半查找的实现

 描述:

编写程序实现折半查找算法。

输入:

第一行是查找表的长度n 
第二行是查找表中的数据元素 ; 
第三行是要查找的数据元素的关键字

输出:

查找成功返回位序,不成功返回-1 ,第二行为比较的次数。

示例输入:

11
5 13 19 21 37 56 64 75 80 88 92
100

示例输出:

-1
4

代码:

 1 #include <iostream>
 2 using namespace std;
 3 #define MAX_NUM 1000
 4 typedef struct _DATA
 5 {
 6     int    datanum;
 7     int dataarr[MAX_NUM];
 8 }DATA, *PDATA;
 9 
10 void InputData(DATA& data, int& iKeyword)
11 {
12     cin>>data.datanum;
13     for(int i = 0; i < data.datanum; i ++)
14         cin>>data.dataarr[i];
15     cin>>iKeyword;
16 }
17 
18 void BinarySearch(DATA& data, int& keyword, int &index, int &searchcnt)
19 {
20     int low = 0;
21     int high = data.datanum - 1;
22     index = -1;
23     int cnt = 0;
24     while(low <= high)
25     {
26         int mid = (low + high) / 2;
27         cnt ++;
28         if(data.dataarr[mid] == keyword)
29         {
30             index = mid;
31             break;
32         }
33         else if(data.dataarr[mid] > keyword)
34         {
35             high = mid - 1;
36         }
37         else
38         {
39             low = mid + 1;
40         }
41     }
42     searchcnt = cnt;
43 }
44 
45 int main()
46 {
47     int keyword, index, cnt;
48     DATA data;
49     InputData(data, keyword);
50     BinarySearch(data, keyword, index, cnt);
51     cout<<index<<endl;
52     cout<<cnt<<endl;
53     return 0;
54 }

 

posted on 2016-03-22 10:46  I*M  阅读(413)  评论(0)    收藏  举报

导航