• 二分查找算法


    二分查找算法主要是解决在“一堆数中找出指定的数”这类问题。

    而想要应用二分查找法,这“一堆数”必须有一下特征:

    • 存储在数组中
    • 有序排列

    二分查找法的基本实现

    二分查找法在算法家族大类中属于“分治法”,分治法基本都可以用递归来实现的,二分查找法的递归实现如下:

    /*
    * 递归实现
    */ private static boolean divideRecur(int[] aa, int left, int right, int tt) {   if(left > right) {     return false;   }   int mid = left + ((right - left)>>1);//防止溢出   if(tt == aa[mid]) {     return true;   }else if(tt < aa[mid]) {     return divideRecur(aa, left, mid -1, tt);   }else {     return divideRecur(aa, mid +1, right, tt);   } }

    迭代实现如下:

    /*
    * 迭代实现
    */
    private static boolean divideTest(int[] aa, int tt) {
    	
      int size = aa.length;
      int left =0;
      int right  = size -1;
      int midIndex = 0;
      int midValue = 0;
      while(left <= right) {
        midIndex = left +((right - left)>> 1);
        midValue = aa[midIndex];
        if(tt==midValue) {
          return true;
        }else if(tt<midValue) {
          right = midIndex -1;
        }else {
          left = midIndex + 1 ;
        }
      }
      return false;
    }
    

    二分查找法的O(log n)让它成为十分高效的算法。不过它的缺陷却也是那么明显的。就在它的限定之上:

    有序,我们很难保证我们的数组都是有序的。当然可以在构建数组的时候进行排序,可是又落到了第二个瓶颈上:它必须是数组

    数组读取效率是O(1),可是它的插入和删除某个元素的效率却是O(n)。因而导致构建有序数组变成低效的事情。

  • 相关阅读:
    DataTable 类(二)处理表中的数据
    .NET中的正则表达式
    DataTable 类(一)表结果操作
    DataGridView(2)数据操作
    DataGridView(一)
    VS2008中配置 Windows SDK v7
    TabControl
    .NET中的正则表达式 (一)Regex 类
    db2的count()函数和sum()函数的用法
    显示原始字符串
  • 原文地址:https://www.cnblogs.com/cherish010/p/9765615.html
Copyright © 2020-2023  润新知