二分查找-数组实现(小trick)
生活随笔
收集整理的這篇文章主要介紹了
二分查找-数组实现(小trick)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
template<typename T>
int binarySearch(T arr[], int n, T target){int l = 0, r = n-1; //在[l...r]范圍內(nèi)尋找target
while(l <= r){ //當(dāng) l == r 時(shí) 區(qū)間有效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]中 }
先相減再加的方法。
while(l <= r){ //當(dāng) l == r 時(shí) 區(qū)間有效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]中 }
此處的需要注意的點(diǎn)是:
為什么不用 int mid = (l+r)/2
因?yàn)閙id,l,r 都是整型,所以如果l,r過大,相加后容易整型溢出,所以使用
int mid = l+(r-l)/2先相減再加的方法。
轉(zhuǎn)載于:https://www.cnblogs.com/Bella2017/p/10088639.html
總結(jié)
以上是生活随笔為你收集整理的二分查找-数组实现(小trick)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单片机入门学习笔记7:人机交互界面
- 下一篇: 弹力设计总结