码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-11-11 01:12:15      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:style   home   序列   相同   example   pre   group   statistic   for   

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

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 数据结构实验之查找四:二分查找

标签:style   home   序列   相同   example   pre   group   statistic   for   

原文地址:http://www.cnblogs.com/Mimick/p/6052782.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!