• 算法回顾(三) 二分查找


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

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

    假设其数组长度为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的最大值,故采用这样的算法。

  • 相关阅读:
    集合
    网络
    File类
    laoshi
    石子合并《1》
    看球的巴士
    打鼹鼠~~线性DP
    题目分享:Wooden Sticks-线性动归
    pycharm怎么切换python版本
    Windows10下CMD输入Python没反应的解决方案
  • 原文地址:https://www.cnblogs.com/csusheep/p/4724745.html
Copyright © 2020-2023  润新知