有序查找指先对有序的数据进行查找操作

几种查找的时间复杂度都是 O(logn)

1.二分查找

每次查找操作选择中间的元素为基准点,与被查找元素比较,然后再选取左或者右边继续进行下次查找

基准点选取为mid = low + (high - low) / 2

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;  //right赋值,适时而变
        else if (array[middle] < value)
            left = middle + 1;
        else
            return middle;
    }
    return -1;
}

2.插值查找

插值查找主要是基准点的选取为mid = low + ((key - a[low]) / (a[high] - a[low])) * (high - low),减少查找的次数。

对于表长较大,而关键分布又比较均匀的查找表来说,插值查找算法的平均性能比折半查找要好得多

3.斐波那契查找

斐波那契数据为:0,1,1,2,3,5,8,13,21,34 这样的数列

选取基准点的位置使用斐波那契数列对应的下标 mid = lod + F[k-1] - 1

二分查找是进行加法与除法运算

插值查找是进行四则运算

斐波那契查找是最简单的加减法运算, 在海量数据查找中,这种差别会影响最终查找效率

results matching ""

    No results matching ""