Linux安全网 - Linux操作系统_Linux 命令_Linux教程_Linux黑客

会员投稿 投稿指南 本期推荐:
搜索:
您的位置: Linux安全网 > Linux编程 > » 正文

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

来源: qq413785523 分享至:

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掉了

 

 


Tags:
分享至:
最新图文资讯
1 2 3 4 5 6
验证码:点击我更换图片 理智评论文明上网,拒绝恶意谩骂 用户名:
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 发展历史