【学习笔记】二分查找
二分查找的学习笔记 之前在bilibili看到一个有趣的视频,关于二分查找的。 戳我看这个有趣的视频 笔记参考:极客时间|数据结构与算法之美 1. 二分思想 就如上面视频中的栗子,猜数字游戏,如果从头开始一个一个的猜是非常低效的。 在实际的开发场景中,假设有1w条订单数据,已经按照订单的金额从小到大排序,每个定干的金额不同,最小单位是元。 如果从第一个订单开始,遍历这1w条订单,直到找到目标为止,这种方法在最坏情况下可能要便利完所有数据才能找到。 但是用二分法,每次都通过跟区间中间元素对比,将整个带查找的区间缩小为之前的一半,直到查找的需要的数据或者区间缩小为0。 2. 二分查找实现(递归和非递归) // 非递归实现 int bsearch ( int a [ ] , int n , int value ) { int low = 0 ; int high = n - 1 ; while ( low <= high ) { int mid = ( low + high ) / 2 ; if ( a [ mid ] == value ) { return mid ; } else if ( a [ mid ] < value ) { low = mid + 1 ; } else { high = mid - 1 ; } } /*while*/ return - 1 ; }