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
    
    }
  • 相关阅读:
    Python Virtualenv 虚拟环境
    二叉树的左视图和右视图
    Vxlan简介
    2、程序的基本结构
    chef cookbook 实战
    eclipse 搭建ruby环境
    linux 安装软件出现/tmp 磁盘不足时 解决方案
    Python 可变对象与不可变对象
    Chapter 4-5
    Chapter 3
  • 原文地址:https://www.cnblogs.com/Chenury/p/14710775.html
Copyright © 2011-2022 走看看