二分查找的两种(找到val,找到第一val)

对{1,2,3,3,3,3,3,4,5},找到3和找到在数组里面出现的第一个3,思路略有不同

找到3:

int binary_search_my(int* a,int n,int val)
{
	int start=0;
	int end=n-1;
	while(start<=end)
	{
            int mid=(start+end)>>1;
            if(a[mid]==val) return mid;
            else if(a[mid]>val) end=mid-1;
            else if(a[mid]<val) start=mid+1;
	}
	return -1;
}
找到第一个3:
int find_first(int *a,int n,int val)
{
    int start=0;
    int end=n-1;
    while(start<=end)
    {
        if(end-start==1)
        {
            if(a[start]==val) return start;
            else if(a[end]==val) return end;
            else    return -1;
        }
        int mid=(start+end)>>1;
        if(a[mid]>=val) end=mid;
        else if(a[mid]<val) start=mid;
    }
}



阅读更多
个人分类: 互联网在线笔试题
上一篇const_cast与mutable
下一篇malloc和new的深入分析
想对作者说点什么? 我来说一句

二分查找扩展

2013年12月12日 37KB 下载

没有更多推荐了,返回首页

关闭
关闭