#ifndef _FIND_H_ #define _FIND_H_ //如果找到了就返回找到的数据的下标,找不到就返回b-1 template <typename T> int find_half(const T* p, //待查找的数组 int b, //起始位置 int e, //终止位置 T data, //要查找的数据 bool increase = true) //数组排列方式,为真表示升序排列,为假表示降序排列 { int r = b - 1; if (increase) { while (b <= e) { int h = (b + e) / 2; if (data < p[h]) e = h - 1; else if (p[h] < data) b = h + 1; else return h; } } else { while (b <= e) { int h = (b + e) / 2; if (data < p[h]) b = h + 1; else if (p[h] < data) e = h - 1; else return h; } } return r; }