您的位置:首页 > 其它

二分查找

2012-08-01 15:01 295 查看
二分查找又称折半查找。

使用二分查找的前提:线性表中的记录必须是关键码有序,线性表必须采用顺序存储。

二分查找的思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;

若给定的值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定的值大于中间

记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所

有查找区域无记录,查找失败为止。

直接说思想可能有点抽象,就举个简单的例子来说明吧。比如给定一个有序数组 a[10],其值从 a[0] 到 a[9] 分别

为 0 到 9 ,比如我们要在其中查找 1,那么根据二分查找思想,先取中间值,即下标为 (0+9)/2=4的值,a[4] = 4,

显然 1 < 4,所有我们要从 4 的左半区继续查找,即从 a[0] 到 a[3] 这段区域查找,这段区域的中间值下标为 1,而

a[1] = 1,所以这样我们便找到了我们要找的值,这样返回相应的下标即可。对于给定值大于中间记录的关键字的和

上面的过程是一样的,这就不多讲了。

二分查找的代码如下:

int Binary_Search(int *a,int n,int key)
{
        int low = 0;
        int high = n - 1;
        int middle;
        while (low <= high)
        {
                middle = (low + high) / 2;
                if (key < a[middle])
                        high = middle - 1;
                else if (key > a[middle])
                        low = middle + 1;
                else
                        return middle;
        }
        return -1;
}


参数说明:a为要查找的区域,n为区域的总长度,key为要查找的值

返回值:若查找成功,则返回值所在区域里的下标,若查找失败,则返回-1。(下标从0开始)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: