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的最大值,故采用这样的算法。

  • 相关阅读:
    创建内核对象的专有命名空间
    内核对象句柄表
    Windows小知识(二)
    内核对象与用户对象/GDI对象
    Windows小知识(一)
    Windows中查看错误
    handle(句柄)
    VC中调用其它程序
    消息映射的转变
    实验6.配置链路聚合
  • 原文地址:https://www.cnblogs.com/csusheep/p/4724745.html
Copyright © 2011-2022 走看看