二分法基本上学计算机的都听过,但是有人不知道的就是其实二分法是减治法的思想。
所谓减治法和分治法有一个主要差别就是减治法是减去一般,就是分治之后只需要解决原问题的一半就可以了得到全局问题的解了。所以速度很快。
下面是二分法的递归程序和非递归程序和主测试程序:
#include#include using namespace std;template int recurBiSearch(const vector &vt, T key, int low, int up){ if(low>up) return -1; int mid = (low+up)>>1; if (key < vt[mid]) { return recurBiSearch(vt, key, low, mid-1); } else if (vt[mid] < key) { return recurBiSearch(vt, key, mid+1, up); } return mid;}template int iterBiSearch(vector &vt, T key, int low, int up){ int mid; while (low<=up) { mid = (low+up)>>1; if(key