分治策略之二分搜索技术

原创 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;
}


经典算法之二分搜索技术

二分法是个非常经典的算法,是分治思想的很好的体现。在复习算法的过程中,正好把他记录下来。本来想写递归的,后来想想还是用迭代,效率更高些,虽然对这种小的数据没什么多大影响,(好吧,其实是我太懒了 !!)...
  • zhyh1435589631
  • zhyh1435589631
  • 2015年06月06日 11:47
  • 1328

递归与分治策略之二分搜索算法

二分搜索算法是运用分治策略的典型例子 二分搜索算法充分利用了元素之间的次序关系(二分搜索的算法是基于有序列)采用分治策略,可在最坏情况下用O(logn)时间完成搜索任务。 二分搜索算法的基本思想是...
  • zhouyayong09
  • zhouyayong09
  • 2012年11月04日 09:05
  • 920

分治策略实现快速排序法

说到算法,暑假就要去实习了,这时才感觉到数据结构和算法的重要性,虽然大二时候已经学过,但是基本用不到,导致现在基本忘了,现在重新拾起,重新把以前学过的和没有学过的算法都理一遍实现一遍!!! 给自己一个...
  • u010687392
  • u010687392
  • 2015年05月27日 11:08
  • 1565

算法中分治策略实现快速排序

快速排序算法是基于分治策略的一个排序算法,其基本思想是,对于输入的子数组,按以下三个步骤求解: 1 分解:选择一个基准元素,将整个数组分为大于基准元素,等于基准元素,小于基准元素的三组。基准元素在在...
  • mengxiangyue
  • mengxiangyue
  • 2011年10月26日 21:28
  • 2979

分治算法--二分搜索

二分查找:以有序表表示静态查找表时,查找函数可以用二分查找(binary search or half-intervalsearch )来实现。这种算法基于分治。...
  • ling_xiao007
  • ling_xiao007
  • 2015年08月03日 14:24
  • 1049

分治策略之最近点对问题

分治策略之最近点对问题问题:在平面给定N个点,求点对间最近距离。 分析:我们知道直线上找出2个最近的点,时间复杂度是O(NlogN),平面上比较所有的点对,直观上我们可以知道时间复杂度是O(N^2)...
  • Mr_KkTian
  • Mr_KkTian
  • 2016年09月24日 19:04
  • 395

Google黑客搜索技术

使用Google搜索引擎可以让普通人做一次黑客(Google Hacking),其原理也是很简单,很多有特定漏洞的网站都有类似的标志页面,而这些页面如果被Google索引到,我们就可以通过搜索指定的单...
  • jxufewbt
  • jxufewbt
  • 2007年06月02日 16:22
  • 624

VS中的"渐进式搜索"

       渐进式搜索定义:通过逐字符输入搜索字符串,然后按搜索字符串的长度来观察找到的匹配项,可以渐进式搜索单个文档或窗口。激活渐进式搜索的两种方法:      1. 从“编辑”菜单中选择“高级”...
  • studying
  • studying
  • 2009年11月20日 17:33
  • 1907

人工智能——搜索技术

引言: 什么是搜索: 根据问题的实际情况不断寻找可利用的知识,构造出一条代价较少的推理路线,使问题得到圆满的解决的过程称为搜索。 包括两个方面: ——找到从初始事实到问题最终答案的一条推理路径...
  • Sun7_She
  • Sun7_She
  • 2014年10月21日 15:04
  • 1207

大数据背景下的“按图索骥”及基于图片内容搜索的技术

大数据浅析       到底什么是大数据(Big data)呢?大数据通常是用来形容大量的非结构化或半结构化的数据,这样的数据要想将他们转化为关系型数据用作日后分析使用所需的前期处理需要花费高昂...
  • miller_lover
  • miller_lover
  • 2014年11月20日 18:14
  • 1322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分治策略之二分搜索技术
举报原因:
原因补充:

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