zoukankan      html  css  js  c++  java
  • [算法][二分法查找]

     1 /*
     2 二分法实验
     3 1、设a[0:n-1]是一个已排好序的数组.
     4 请改写二分搜索算法,使得当搜索元素x不在数组中时,
     5 返回小于x的最大元素的位置I和大于x的最大元素位置j.
     6 当搜索元素在数组中时,I和j相同,均为x在数组中的位置.
     7 2、设有n个不同的整数排好序后存放于t[0:n-1]中,
     8 若存在一个下标I,0<=i<n,使得t[i]=i,
     9 设计一个有效的算法找到这个下标.
    10 要求算法在最坏的情况下的计算时间为O(logn).
    11 */
    12 #include<iostream>
    13 using namespace std;
    14 /*
    15 功能:1二分查找改进版
    16 输入:拍好序的a[],大小n,待查数x,返回参数i,j
    17 返回:真:找到
    18 */
    19 bool BinarySearch(int *a,int n,int x,int& i,int& j){
    20     int left=0;
    21     int right=n-1;
    22     while(left<=right){
    23         int mid=(left+right)/2;
    24         if(x==a[mid]){
    25             i=j=mid;
    26             return true;
    27         }
    28         if(x>a[mid])
    29             left=mid+1;
    30         else
    31             right=mid-1;
    32     }
    33     i=right;
    34     j=left;
    35     return false;
    36 }
    37 /*
    38 功能:2高效查找
    39 输入:数组,大小,待查值
    40 返回:下标,若没有返回-1
    41 */
    42 int SearchTag(int *a,int n,int x){
    43     int left=0;
    44     int right=n-1;
    45     while(left<=right){
    46         int mid=(left+right)/2;
    47         if(x==a[mid]) return mid;
    48         if(x>a[mid])
    49             left=mid+1;
    50         else
    51             right=mid-1;
    52     }
    53     return -1;
    54 }
    55 int main(){
    56     int n,i,j,a[1000],x;
    57     while(cin>>n){//输入数组大小
    58         for(i=0;i<n;i++)cin>>a[i];//输入数据,需要从小到大
    59         cin>>x;//输入待查数据
    60         BinarySearch(a,n,x,i,j);//超找
    61         cout<<"用函数1找到的i,j为: "<<'('<<i<<','<<j<<')'<<'
    ';//输出对应的i,j
    62         cout<<"用函数2找到的下标为: "<<SearchTag(a,n,x)<<"
    
    ";//输出2找到的下标
    63     }return 0;
    64 }
  • 相关阅读:
    redis缓存数据
    VMware克隆服务器
    Java去掉Html标签的方法
    设计模式学习笔记:一、代理模式(动态代理实现)
    设计模式学习笔记:一、代理模式(动态代理步骤+举例)
    Python教程资源
    Lucene入门
    Oracle入门
    Sql入门
    将web工程署到Linux简单实现
  • 原文地址:https://www.cnblogs.com/zjutlitao/p/3664896.html
Copyright © 2011-2022 走看看