分治策略之二分搜索技术

原创 2012年06月02日 12:30:26

问题描述:

给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x

算法复杂度分析:

每执行一次算法的while循环,待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn) 次。循环体内运算需要O(1) 时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn)


//二分搜索技术(分治)
#include <iostream>

using namespace std;

template <typename Type>
int BinarySearch(Type a[], const Type &x, int n)
{
    //在a[0]<=a[1]<=...<=a[n-1]中搜索x
    //找到x时返回其在数组中的位置,否则返回-1
    int left = 0;
    int right = n-1;
    while(left <= right)
    {
        int middle = (left+right)/2;
        if(x == a[middle])
        {
            return middle;
        }
        if(x > a[middle])
        {
            left = middle+1;
        } else {
            right = middle-1;
        }
    }
    //未找到x
    return -1;
}

int main()
{
    int n;
    cout<<"输入数组的大小n:"<<endl;
    cin>>n;
    int *a = new int[n];
    cout<<"输入数组中的数据:"<<endl;
    for(int i = 0; i < n; i++)
    {
        cin>>a[i];
    }
    int obj_num;
    cout<<"输入所要找的数:"<<endl;
    cin>>obj_num;
    int flag = BinarySearch(a,obj_num,n);

    if(-1 == flag)
    {
        cout<<"未找到obj_num"<<endl;
    } else {
        cout<<"找到obj_num,其在数组中的下标为:"<<flag<<endl<<"是第"<<flag+1<<"个数"<<endl;
    }
    delete a;
    return 0;
}


相关文章推荐

第2章 递归与分治策略,二分搜索技术(查找不成功时,返回区间位置)

当要查找的数x不在有序数组a中时,返回第一个大于x的数的位置或第一个小于x的数的位置   lowend,midend,highend表示查找结束时各游标的值,low,mid,high表示使查找结束...

二分搜索技术(分治法)

/**二分搜索技术(分治法)**二分搜索技术算法是运用分治策略的经典型例子*给定已排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。*首先较容易想到的是用顺序搜索方法,逐个比较a[...

2.1 二分搜索技术

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。       【思想】:首先,假设...

复杂的1秒 图解Google搜索技术

谷歌自家设计服务器   谷歌的数据中心高度机密,我们所能得到的信息十分有限。我们先来看几个数据:谷歌在美国本土的数据中心有19个以上,另有17个分布在美国以外的世界各地;每个数据中心有50万平方...
  • DSeven
  • DSeven
  • 2013年05月18日 17:41
  • 1897

老程序猿创业记(2):使用搜索技术

十年前,懂得搜索技术的人,应该是“计算机科学中的战斗机”。 不过这几年,随着Lucene、Nutch等一大批开源软件,搜索变成普通的技术了。我也是这些开源软件的受益者,不但顺利完成毕业论文,找工作也...

《数学之美》阅读笔记之Google搜索技术浅析

博主虽然学计算机出身,惭愧的是对计算机的许多方向都不了解。决定从现在开始,多读书,对各个方向都看一看。刚看完数学之美这本书,介绍了许多数学原理在计算机行业的应用。博主想简单总结一下,本篇主要围绕搜索引...

搜索技术--建立索引(lucene3.0)

搜索技术--建立索引(lucene3.0)(2011-01-11 14:52:53)转载标签: indexwriteranalyzerdocumentfield搜索引擎索引文档域javait 分类: ...

搜索技术之我不懂的东西?

前几天上着班呢,一个过去的同事给我打电话过来,接起电话,就听那边机关枪似得一顿扫射,谈话内容是这样子的。 那个谁,我这里现在有个问题要请教下你,这边有个站,客户要加个需求,就是需要一个搜索的功能,大...

浅谈导航数据中POI搜索技术原理

浅谈导航数据中POI搜索技术原理 王健         导航技术的应用已经成为现在生活中重要组成部分,为我们的生活提供了极大的便利。基本都有这样生活的体验,搜索自己位置附近的银行网点、餐馆。那么这些P...

搜索技术之--以图搜图

以图搜图,是通过搜索图像文本或者视觉特征,为用户提供互联网上相关图形图像资料检索服务的专业搜索引擎系统,是搜索引擎的一种细分。通过输入与图片名称或内容相似的关键字来进行检索,另一种通过上传与搜索结果相...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分治策略之二分搜索技术
举报原因:
原因补充:

(最多只允许输入30个字)