zoukankan      html  css  js  c++  java
  • 顺序表 | 二分搜索

     1.二分查找某个元素

    1)递归实现

    int dichotomy_find(int * sqList,int a,int b,int value){
        if(a>b) return -1;
        int m=(a+b)/2;
        if(sqList[m]==value) return m;
        else if(sqList[m]>value)return dichotomy_find(sqList,a,m-1,value);
        else return dichotomy_find(sqList,m+1,b,value);
    }

     2)非递归实现

    int bisearch(int arr[],int n,int x){
        int low=0,high=n-1,mid;
        while(low<=high){
            mid=(low+high)/2;
            if(arr[mid]==x) break;
            else if(arr[mid]<x) low=mid+1;
            else high=mid-1;
        }
        if(arr[mid]!=x) return -1;
        return mid;
    }

     2.二分查找范围元素

    int get_left(int * sqList,int a,int b,int s){
        //find:sqList[l-1]<s , sqList[l]>=s
        int m=(a+b)/2;
        if(sqList[m]>=s){
            if(a==b)
                return m;
            else
                return get_left(sqList,a,m,s);
        }else{
            if(a==b)
                return m;
            else
                return get_left(sqList,m+1,b,s);
        }
    }
    
    int get_right(int * sqList,int a,int b,int t){
        //find:sqList[l-1]<s , sqList[l]>=s
        int m=(a+b)/2;
        if(sqList[m]<=t){
            if(a==b)
                return m;
            else
                return get_right(sqList,m+1,b,t);
        }else{
            if(a==b)
                return m;
            else
                return get_right(sqList,a,m,t);
        }
    }

    效果:

  • 相关阅读:
    记人生第一面之ThoughtWorks面试经历
    2016阿里笔试
    思特沃克学院学习方法总结
    敏捷软件开发
    express
    如何将项目部署到heroku并使用malb数据库
    渐进增强与平稳退化
    what is react?
    什么是Node.js
    面试1(转)
  • 原文地址:https://www.cnblogs.com/TQCAI/p/8108818.html
Copyright © 2011-2022 走看看