简单的快速排序与二分查找
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掉了
相关文章推荐
- 简单Java冒泡排序 二分查找 快速排序
- js基本算法:冒泡排序,二分查找的简单实例
- 【LintCode 简单】14. 二分查找
- 二分查找真的有你想象中那么简单吗?
- Java实现的两种常见简单查找算法示例【快速查找与二分查找】
- c语言的二分查找简单实例
- 插入排序优化:简单插入排序->二分查找插入排序->二路插入排序->shell插入排序
- 快速排序以及二分查找的实现
- HDU-2899(简单数学问题+二分查找)
- C语言使用stdlib.h库函数的二分查找和快速排序的实现代码
- 二分查找的简单实现
- 二分查找and快速排序
- 逻辑清晰、简单的二分查找
- LintCode【简单】14. 二分查找 。代码及思路
- 快速排序以及二分查找的实现
- CPP一个简单二分查找(查找元素是类对象)
- 【Cuda并行编程之一】二分查找的探究以及Cuda的简单实现&&相关面试题介绍
- 代码合集:健壮的二分查找,高效的堆排序和快速排序
- 二分查找算法与快速排序
- python 二分查找和快速排序实例详解