算法练习-有序数查找

练习问题来源

https://wizardforcel.gitbooks.io/the-art-of-programming-by-july/content/04.01.html

要求

给定一个有序的数组,查找某个数是否在数组中,请编程实现。

解法

在有序数组中查找,采用二分查找。
要准确实现二分查找,首先要把握下面几个要点:

关于right的赋值
    right = n-1 => while(left <= right) => right = middle-1;
    right = n => while(left < right) => right = middle;
middle的计算不能写在while循环外,否则无法得到更新。

代码实现

int BinarySearch(int array[], int n, int value)
{
    int left = 0;
    int right = n-1;
    while(left <= right)
    {
        int middle = left + ((right - left) >> 1);  // 防止溢出
        if (array[middle] > value)
        {
            right = middle - 1;
        }
        else if (array[middle] < value)
        {
            left = middle + 1;
        }
        else
            return middle;
    }
    return -1;
}
posted @ 2016-08-15 11:25  NobodyZhou  阅读(180)  评论(0编辑  收藏  举报