SDUT 3376 数据结构实验之查找四:二分查找

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SDUT 3376 数据结构实验之查找四:二分查找相关的知识,希望对你有一定的参考价值。

数据结构实验之查找四:二分查找

Time Limit: 20MS Memory Limit: 65536KB

Problem Description

在一个给定的无重复元素的递增序列里,查找与给定关键字相同的元素,若存在则输出找到的位置,不存在输出-1。

Input

一组输入数据,输入数据第一行首先输入两个正整数n ( n < = 10^6 )和m ( m < = 10^4 ),n是数组中数据元素个数,随后连续输入n个正整数,输入的数据保证数列递增。
随后m行输入m个待查找的关键字key

Output

若在给定的序列中能够找到与关键字key相等的元素,则输出位序(序号从0开始),否则输出-1。

Example Input

8 3
4 6 8 9 13 20 21 22
6
8
17

Example Output

1
2
-1
DQE:
使用while循环实现二分查找,本题数据量略大,算法时间临界,服务器压力较大时可能出现TLE,未优化算法。

 1 #include <iostream>
 2 #include <cstdio>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int f[1000010];
 9     int n,m,k,i;
10     while(scanf("%d %d",&n,&m)!=EOF)
11     {
12         for(i=0;i<n;i++)
13             scanf("%d",f+i);
14         while(m--)
15         {
16             bool flag=true;
17             scanf("%d",&k);
18             int l=0,r=n-1;
19             while(l<=r)
20             {
21                 int ll=(l+r)/2;
22                 if(f[ll]==k)
23                 {
24                     printf("%d\n",ll);
25                     flag=false;
26                     break;
27                 }
28                 else if(f[ll]>k)
29                 {
30                     r=ll-1;
31                 }
32                 else
33                     l=ll+1;
34             }
35             if(flag)
36                 printf("-1\n");
37         }
38     }
39     return 0;
40 }
41 
42 /***************************************************
43 User name: ***
44 Result: Accepted
45 Take time: 28ms
46 Take Memory: 544KB
47 Submit time: 2016-11-10 22:55:11
48 ****************************************************/

以上是关于SDUT 3376 数据结构实验之查找四:二分查找的主要内容,如果未能解决你的问题,请参考以下文章

SDUT 3377 数据结构实验之查找五:平方之哈希表

SDUT 3379 数据结构实验之查找七:线性之哈希表

SDUT数据结构实验之查找三:树的种类统计

SDUT 3375 数据结构实验之查找三:树的种类统计

SDUT 3374 数据结构实验之查找二:平衡二叉树

数据结构上机实验之二分查找