没有Bug的二分法

来源:互联网 发布:单片机电子时钟原理图 编辑:程序博客网 时间:2024/05/29 15:17

每一个学过数据结构和算法的人都知道二分法,对于二分法的定义和思想了然于胸,然而,真正能够在很短的时间里面写出没有bug的二分法是不容易的一件事。想要编写没有bug的二分查找,最重要的亮点就是判断循环体是否终止的语句以及边界值left,right和区间值这三个地方要保持一致。下面记录二分法的两个不同的边界写法,千万不要搞混了。
写法一:

int BinarySearch(vector<int>& nums, int value) {    int len = nums.size();    int left = 0;    int right = len - 1;    while (left <= right) {        int middle = left + ((right - left) >> 1);        if (nums[middle] > value) {            right = middle - 1;        } else if (nums[middle] < value) {            left = middle + 1;        } else {            return middle;        }    }    return -1;}

写法二:

int BinarySearch(vector<int>& nums, int value) {    int len = nums.size();    int left = 0;    int right = len; // 关键点    while (left < right) { // 终止条件修改        int middle = left + ((right - left) >> 1);        if (nums[middle] > value) {            right = middle; // 此处也要修改        } else if (nums[middle] < value) {            left = middle + 1;        } else {            return middle;        }    }    return -1;}
原创粉丝点击