zoukankan      html  css  js  c++  java
  • 算法回顾(三) 二分查找

    二分查找,顾名思义,它的原理是,将排序好的数列分成两部分,判断期待值在高位部分还是在低位部分,然后再将期待值所在的那个区间的数列重新按照这个规则划分成两部分,再比较,直到最后不能划分为止。

    优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

    假设其数组长度为n,那么该算法复杂度为o(log(n))。代码如下:

    1 int binarySearch( int *a , int begin, int end, int key)
    2 {
    3     int mid = begin + ((end - begin)>>1 ), index;
    4     index = a[mid] < key && begin +1 < end ? binarySearch(a, mid+1, end ,key):
    5                (a[mid] > key && begin + 1 < end ? binarySearch(a, begin, mid, key):
    6                  mid*(a[mid] == key) + (-1)*(a[mid] != key) );
    7 
    8     return index;
    9 }

    ps.第三行是为了防止int相加后超过int的最大值,故采用这样的算法。

  • 相关阅读:
    字段名删不掉
    刷新f5/ctrl+f5
    大量数据模拟
    sub_query join drupal7 view_query_alter
    测试风格的代码
    csv/excel乱码
    window.location.reload(true)的异步现象
    扫描条形码
    yield %%% generator
    batch example
  • 原文地址:https://www.cnblogs.com/csusheep/p/4724745.html
Copyright © 2011-2022 走看看