二分查找

来源:互联网 发布:注册公司 知乎 编辑:程序博客网 时间:2024/05/23 00:04

题目描述

 在一个递增的序列里,查找元素是否存在,若存在输出YES,不存在输出NO.

输入

 本题多组数据,首先输入一个数字n(n>=100000),然后输入n个数,数据保证数列递增,然后再输入一个查找数字。

输出

 若存在输出YES,不存在输出NO.

示例输入

41 3 5 83

示例输出

YES

简单二分查找,这个题说的是一个递增序列,如果不递增的话,需要先排下序,建议用快排(n比较大),由于好久没手写快拍了,以前是直接调用sort函数,所以这次想写一下(竟然用不到这道题安静)。

#include<stdio.h>#include<string.h>int n, i;int a[100000+10];void qsort(int a[], int l ,int r){int x=a[l], i=l, j=r;if(l>=r) return;while(i<j){while(i<j && a[j]>=x) j--;a[i] = a[j];while(i<j && a[i]<=x) i++;a[j] = a[i];}a[i] = x;qsort(a, l, i-1);qsort(a, i+1, r);}int Binsearch(int a[], int s, int t, int key){int low = s, high=t, mid;if(s<=t){mid = low+(high-low)/2;if(a[mid]==key){printf("YES\n");    return 0;}if(a[mid]>key){return Binsearch(a, low, mid-1, key);}else return Binsearch(a, mid+1, high, key);}printf("NO\n");return 0;}int main(){    while(~scanf("%d",&n)){int key;for(i=0; i<n; i++)scanf("%d", &a[i]);//qsort(a, 0, n-1);scanf("%d", &key);Binsearch(a, 0, n-1, key);}}




0 0
原创粉丝点击