顺序查找和折半查找

Posted coolcpp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了顺序查找和折半查找相关的知识,希望对你有一定的参考价值。

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;
}




以上是关于顺序查找和折半查找的主要内容,如果未能解决你的问题,请参考以下文章

顺序查找和折半查找

顺序查找和折半查找

数据结构 查找表的顺序查找折半查找插值查找以及Fibonacci查找

知识分享:数据结构—C语言实现“顺序查找”和“折半查找”

浅谈顺序折半查找

顺序查找折半查找的区别与联系