最近重新开始看算法,读着牛人的老师的书,收获颇多。 二分搜索一直没有去注意太多,认为实现起来很简单。其实不然,其中却有很多足以细细品味斟酌之处。 尝试着写了一下,针对有相同元素的,能找到第一个和最后一个。 int binary_search_first(int t, int * x, size_t begin, size_t end) { size_t l = begin; size_t h = end; while(l < h) { size_t mid = (l + h)/2; if(x[mid] < t) l = mid + 1; else h = mid; } if(x[h] == t) return h; else return -1; } int binary_search_last(int t, int * x, size_t begin, size_t end) { size_t l = begin; size_t h = end; while(l < h) { size_t mid = (l + h)/2 + 1; if(x[mid] > t) h = mid - 1; else l = mid; } if(x[h] == t) return h; else return -1; }