zoukankan      html  css  js  c++  java
  • 二分查找-数组实现(小trick)

    template<typename T>
    int binarySearch(T arr[], int n, T target){
        int l = 0, r = n-1;          //在[l...r]范围内寻找target
    while(l <= r){              //当 l == r 时 区间有效
    int mid = l+(r-l)/2; if(arr[mid] == target) return mid; if(target > arr[mid]) l = mid + 1;          //target在[mid+1, r]中 else                 //target<arr[mid]
    r = mid - 1;          //target在[l...mid]中 }

    此处的需要注意的点是:

    为什么不用 int mid = (l+r)/2

    因为mid,l,r 都是整型,所以如果l,r过大,相加后容易整型溢出,所以使用

    int mid = l+(r-l)/2

    先相减再加的方法。
  • 相关阅读:
    Web开发快速上手
    前端概述
    Python语言进阶
    图像和办公文档处理
    网络编程
    进程和线程
    正则表达式
    面向对象进阶
    面向对象
    js 获取指定时间上月26 ,
  • 原文地址:https://www.cnblogs.com/Bella2017/p/10088639.html
Copyright © 2011-2022 走看看