您的位置:首页 > 其它

简单的快速排序与二分查找

2011-12-10 16:07 281 查看

Time Limit:2 Sec Memory Limit:64 MB

Description

某天,有人给czyuan出了个难题(这个人是不是佳姐呢~):

给你N个数(0 <= N <= 100000),再给你Q次询问(0 <= Q <= 100000),每次询问告诉你一个数K,要你判断K是否在给定的N个数中。(所有数据均为整数,且在int范围内)

Input

多组测试数据,每组测试数据第一行为N, Q。第二行N个数,以下Q行,每行一个数K。输入数据以N = Q = 0结束。

Output

每组数据输出Q行,如果K存在N个数中,则输出YES,否则输出NO。

Sample Input

5 3
3 4 9 8 7
6
7
8
0 0


Sample Output

NO
YES
YES


代码:

#include <stdio.h>
#include <stdlib.h>
int sort(const void *a, const void *b)
{
return ((int *)a-(int *)b);
}
int search(int array[], int n, int num)
{
int min =0;
int max =n-1;
int mid;
while (min <= max)
{
mid=(min+max)/2;
if (array[mid]>num)
max=mid-1;
else if(array[mid]<num)
min=mid+1;
else
return 1;
}
return 0;
}
int main()
{
int n,m,k,i;
int a[100000];
while(scanf("%d %d",&n,&m),n+m)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(int),sort);
while(m--)
{
scanf("%d",&k);
printf(search(a,n,k)==0? "NO\n":"YES\n");
}
}
return 0;
}


分析:本来的想法是用for完全遍历,然后提交后果断的悲剧了!超时!才学C不久还没接触过算法,以前一直在做简单的模拟和数学题,很少遇到超时。

今天才学的二分查找和快速排序.总算给A掉了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: