标签:
二分查找法主要是解决在“一堆数中找出指定的数”这类问题。
而想要应用二分查找法,这“一堆数”必须有一下特征:
所以如果是用链表存储的,就无法在其上应用二分查找法了。(曽在面试被问二分查找法可以什么数据结构上使用:数组?链表?)
至于是顺序递增排列还是递减排列,数组中是否存在相同的元素都不要紧。不过一般情况,我们还是希望并假设数组是递增排列,数组中的元素互不相同。
算法图解:
递归实现:
template <typename T> int BinarySearch(const T* arr, int start, int end, const T& value) { if (start<end) { int middle = (end - start) / 2 + start; if (arr[middle] < value) { start = middle + 1; return BinarySearch(arr, start, end, value); } else if (arr[middle] > value) { end = middle - 1; return BinarySearch(arr, start, end, value); } else return middle; } return -1; }
非递归实现:
http://www.cnblogs.com/QG-whz/p/5194627.html
标签:
原文地址:http://www.cnblogs.com/shihaochangeworld/p/5501086.html