二分算法

大部分人一听到二分可能都觉得很简单,但事实真的如此吗?
笔者认为,二分原理确实不复杂,它的主要难点难在边界上,难在对查找场景的运用。

一、主要思路:

二分查找就是将查找的键和子数组的中间键作比较,如果被查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。

二、代码:

bool check(int x) {
} // 一般用来检查x
// 区间[l, r]被划分成[l, mid]和[mid + 1, r]
int bsearch_1(int l, int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;   
        else l = mid + 1;
    }
    return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]
int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1;
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

三、主要运用场景

待补充....
上一篇:在MVC中如何愉快使用Ajax


下一篇:Java 设计模式实现 不错的引用