zoukankan      html  css  js  c++  java
  • 2.1二分搜索技术

    一、操作要求 

      给定排好序的n个元素a[0:n-1],现在要在这n个元素中找出一特定元素x,顺序搜索需要O(n)次比较,二分法充分利用元素之间的次序关系,采用分治策略,最坏情况下可以用O(logn)的时间完成搜索。

    二、基本思想

      将n个元素分成大致的2部分,取a[n/2]与x作比较:

      (1)如果x=a[n/2],则找到x,算法终止;

      (2)如果x<a[n/2],则只在数组左半部继续搜索x;

      (3)如果x>a[n/2],则只在数组右半部继续搜索x;

    三、代码实现(简单版本)

    #include <bits/stdc++.h>
    using namespace std;
    
    int Binary(int a[],int n,int x,int count)
    {
        int left = 0;
        int right = n-1;
        while(left<=right)
        {
            int count = 0;
            count++;
            int mid = (left+right)/2;
            if(a[mid]==x)
            {
                return mid;
            }
    
            if(x>a[mid])
            {
                left = mid+1;
            }
            else
            {
                right = mid-1;
            }
        }
        return -1;
    }
    int main()
    {
        int n;
        cin>>n;
        int a[n];
        for(int i=0;i<n;i++)
        {
            cin>>a[i];
        }
        int x;
        cin>>x;
        int count =0;
        cout<<Binary(a,n,x,count);//输出序号标号方式为0:n-1
    
    }
  • 相关阅读:
    hbase 简介
    Hadoop本地库介绍
    MapReduce:详解Shuffle过程
    eucalyptus,openstack
    openstack installing...
    今年2011
    wget代理设置(转载)
    openstack running
    python 升级到2.6(转载)
    高德地图Windowphone API学习地图定位与地图模式的切换
  • 原文地址:https://www.cnblogs.com/Chenury/p/14710775.html
Copyright © 2011-2022 走看看