zoukankan      html  css  js  c++  java
  • 二分查找(Binary Search)的递归和非递归

    Binary Search 有时候我们也把它叫做二进制查找

    是一种较为高效的再数组中查找目标元素的方法

    我们可以通过递归和非递归两种方式来实现它

        //非递归
          public static int binarySearch(int[] arr, int x) {
            int low = 0;   
            int high = arr.length-1;   
            while(low <= high) {   
                int middle = (low + high)/2;   
                if(x == arr[middle]) {   
                    return middle;   
                }else if(x <arr[middle]) {   
                    high = middle - 1;   
                }else {   
                    low = middle + 1;   
                }  
            }  
            return -1;  
        }
        //递归实现二分查找
        public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){    
               int midIndex = (beginIndex+endIndex)/2;    
               if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){  
                   return -1;    
               }  
               if(data <dataset[midIndex]){    
                   return binarySearch(dataset,data,beginIndex,midIndex-1);    
               }else if(data>dataset[midIndex]){    
                   return binarySearch(dataset,data,midIndex+1,endIndex);    
               }else {    
                   return midIndex;    
               }    
           }   
    

      时间复杂度是O(log2 n)的,最差情况是log2(n+1)

  • 相关阅读:
    移动触摸事件之二
    移动touch事件之一
    Phonegap创建项目语法
    JS自定义去除字符串左右两边的指定字符
    video标签常用属性及说明
    html5开发之viewport使用
    页面事件总结
    缓存与预取
    修改JQM的默认配置属性
    JQM事件详解
  • 原文地址:https://www.cnblogs.com/QuixoteY/p/10245094.html
Copyright © 2011-2022 走看看