二分查找(binary search)

来源:互联网 发布:网络销售合作合同 编辑:程序博客网 时间:2024/04/28 12:19

二分查找,也叫做折半查找,或者叫二分搜索。

这个算法要求被搜索的数据结构已经排序。比起顺序查找要快很多

用递归我们可以很容易的写出这样的算法

function binarySearch(value, arr) {var mid = Math.floor(arr.length / 2);if(arr[mid] == value) {return mid;}if(arr[mid] > value) {return binarySearchValue(0, mid);  } else {return binarySearchValue(mid+1, arr.length);}function binarySearchValue(start, stop) {/*@start: 子序列起点,包含@stop: 子序列终点,不包含*/if(start >= stop) {return -1;}var _mid = Math.floor(start + (stop -start)/2);if(arr[_mid] == value) {return _mid;} if(arr[_mid] > value) {return binarySearchValue(start, _mid);} else {return binarySearchValue(_mid+1, stop);}}}var arr = [4, 7, 10, 15, 20, 30, 40];

不使用递归的话,

/*不使用递归实现二分查找*/function binarySearch2 (value, arr) {var start = 0,stop = arr.length;   // stopmid = Math.floor(stop / 2);while(stop > start) {if(arr[mid] == value) {return mid;}if(arr[mid] > value) {stop = mid;} else {start = mid + 1;}mid = Math.floor(start + (stop - start) / 2);}return -1;}