zoukankan      html  css  js  c++  java
  • SUMMARY | 二分查找

    package Search;
    
    public class biSearch {
        //标准的二分查找
        public static int stdBiSearch(int[] array,int keyValue) {
            int length=array.length;
            int left=0,right=length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(keyValue<array[mid]) right=mid-1;
                else if(keyValue>array[mid]) left=mid+1;
                else return mid;
            }
            return -1;
        }
        
        //(二分法)查找第一个小于keyValue的元素
        public static int BiSearchToFindFirstSmaller(int[] array,int keyValue) {
            int length=array.length;
            int left=0,right=length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(keyValue<=array[mid]) right=mid-1;
                else left=mid+1;
            }
            return right;
        }
        
        //(二分法)查找第一个大于等于keyValue的元素
        public static int BiSearchToFindFirstBiggerorEqual(int[] array,int keyValue) {
            int length=array.length;
            int left=0,right=length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(keyValue<=array[mid]) right=mid-1;
                else left=mid+1;
            }
            return left;
        }
        
        //(二分法)查找第一个最后一个小于等于keyValue的元素
        public static int BiSearchToFindLastSmallerorEqual(int[] array,int keyValue) {
            int length=array.length;
            int left=0,right=length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(keyValue<array[mid]) right=mid-1;
                else left=mid+1;
            }
            return right;
        }
        
        //(二分法)查找第一个第一个大于keyValue的元素
        public static int BiSearchToFindFirstBigger(int[] array,int keyValue) {
            int length=array.length;
            int left=0,right=length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(keyValue<array[mid]) right=mid-1;
                else left=mid+1;
            }
            return left;
        }
        
        //(二分法)查找第一个第一个等于keyValue的元素
        public static int BiSearchToFindFirst(int[] array,int keyValue) {
            int length=array.length;
            int left=0,right=length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(keyValue<=array[mid]) right=mid-1;
                else left=mid+1;
            }
            //array[right]<keyValue<=array[left]
            if(left<length&&array[left]==keyValue) return left;
            else return -1;
        }
        
        //(二分法)查找第一个最后一个等于keyValue的元素
        public static int BiSearchToFindLast(int[] array,int keyValue) {
            int length=array.length;
            int left=0,right=length-1;
            while(left<=right){
                int mid=(left+right)/2;
                if(keyValue<array[mid]) right=mid-1;
                else left=mid+1;
            }
            //array[right]<=keyValue<array[left]
            if(right>=0&&array[right]==keyValue) return right;
            else return -1;
        }
        
        //测试样例
        public static void main(String[] args) {
            int[] a=new int[]{0,1,2,2,2,5,6};
            System.out.println(BiSearchToFindLast(a, 2));
        }
    }

    一张图帮助理解:

     参考博客地址:https://www.cnblogs.com/bofengyu/p/6761389.html

  • 相关阅读:
    Android应用开发学习笔记之事件处理
    [置顶] 炎炎夏日,给你一次极爽的开发体验!——统一开发环境功能升级优化,正式上线V2.0!
    POJ 3468 A Simple Problem with Integers (伸展树区间更新求和操作 , 模板)
    京东商城发现了一枚Bug
    iOS_40_核心动画
    SVN——库合并
    ORACLE 8i 遇到报错:ORA-01631: max # extents (505) reached in table
    HDU 5366:The mook jong 递推
    Linux平台下裸设备的绑定:
    CSP:使用CryptoAPI解码X509证书内容
  • 原文地址:https://www.cnblogs.com/ustctp/p/9032934.html
Copyright © 2011-2022 走看看