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

T044 二分搜索(含鬼畜压行写法)

时间:2015-11-11 21:59:28      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

用二分的前提是数据已经升序排好,切记切记

#include<stdio.h>

int BSearch(int A[],int n,int key)//A[]存放数据的数组;n数据个数;key要搜索内容
{
    int l, r, m;
    l=0,r=n-1;
    while(l<=r)
    {
        m=l+(r-l)/2;//不用(l+r)/2避免数据溢出
        if(A[m]<key)//向右查找
            l=m+1;
        else if(A[m]>key)//向左查找
            r=m-1;
        else return m;//找到
    }
    return -1;
}

int binSearch(int a[], int begin, int end, int k)//比较鬼畜的写法。。压行不是梦。。
{
    int mid = begin + ( (end - begin)>>1 ),index;
    index = a[mid] < k && begin + 1 <= end ? binSearch(a,mid+1,end,k) :
          ( a[mid] > k && begin + 1 <= end ? binSearch(a,begin,mid,k) :
            mid * (a[mid] == k) + (a[mid] != k)*(-1));
    return index;
}

int main()
{
    int n, i, key, result, result1;
    int A[100];
    scanf("%d", &n);
    for(i=0;i<n;i++)
    {
        scanf("%d", &A[i]);
    }
    scanf("%d", &key);
    result=BSearch(A,n,key);
    result1=binSearch(A,0,n-1,key);
    if(result>=0) printf("%d\n", result);//下标大于等于0即找到该数据
    else puts("null");
    if(result1>=0) printf("%d\n", result1);
    else printf("null\n");
    return 0;
}

 

T044 二分搜索(含鬼畜压行写法)

标签:

原文地址:http://www.cnblogs.com/striderdu/p/4957300.html

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