码迷,mamicode.com
首页 > 其他好文 > 详细

顺序查找和折半查找

时间:2018-07-22 15:07:41      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:str   列表   lse   turn   排序   ++   array   中间   搜索   

1. 顺序查找

指从列表头开始顺序搜索列表。
如果项目并非以某种顺序排列,就只能使用顺序查找。如果要搜索的项目不在列表里,就得搜索完所有的项目才能得出该项目在不在列表里面。

int seq(int *array, int low, int high, int key)
{
    for(int i = low; i < high; i++)
    {
        if(array[i] == key)
            return i;
    }
    return -1;
}

2. 折半搜索

对于一个已经排序的列表,使用折半搜索的效率要比顺序搜索高很多。
原理是每次取项目中最中间的数和要查找的数进行比较,如果中间的数就是这个数,则只需一次搜索便可找到;
如果搜索的数比中间的数小,则再在下半部分继续折半搜索;
如果搜索的数比中间的数大,则再在上半部分继续折半搜索。直到找到这个数字。

实现代码:

//折半搜索
int binary(int *array, int low, int high, int key)
{
    while(low <= high)
    {
        //中间切一刀
        int mid = (low + high) / 2;
        //正好是中间这个数
        if(key == array[mid])
            return mid;
        //数比中间的数大,则在下半部分再切一刀缩小范围
        else if(key > array[mid])
            low = mid + 1;
        //数比中间的数小,则在上半部分再切一刀缩小范围
        else
            high = mid - 1;
    }
    return -1;
}

使用递归实现折半搜索:

//折半搜索 递归表示
int binary_rec(int *array, int low, int high, int key)
{
    if(low < high)
    {
        int mid = (low + high) / 2;
        if(key == array[mid])
            return mid;
        else if(key > array[mid])
            return binary_rec(array, mid + 1, high, key);
        else
            return binary_rec(array, low, mid - 1, key);
    }
    else
        return -1;
}

顺序查找和折半查找

标签:str   列表   lse   turn   排序   ++   array   中间   搜索   

原文地址:https://www.cnblogs.com/coolcpp/p/search.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!