2、折半查找——查找算法

2019/11/02

2、折半查找   ( 折半查找效率比顺序查找效率高 ,但折半查找只适用于   有序表  ,且限于 有序结构

要求:

1.线性表必须采用 顺序存储结构。

2.表中元素按关键字有序排列。

算法描述: [时间复杂度:O(log2n) ]

int Search_Bin(SSTable ST, KeyTable key){

    int low = 1,mid;

    int high = ST.length;

    while(low<=high){

        mid = (low+high) / 2;

        if(key==ST.R[mid].key)  return mid;   //找到待查元素

        else if(key<ST.R[mid].key) high=mid-1; //继续在前一子表进行查找

        else low=mid+1;//继续在后一子表进行查找

    }

    return 0;  //表中不存在待查元素

}

折半查找递归算法:

int Search_bin(SSTable ST, KeyType key, int low_in, int high_in){

    int low = low_in;

    int high = high_in;

    int mid=mid = (low+high) / 2; 

    while(low<=high){

        if(key==ST.R[mid].key)  return mid;  //找到待查元素

        else if(key<ST.R[mid].key)  return Search_bin(ST,key,low,mid-1);  //继续在前一子表进行查找

        else return Search_bin(ST,key,low,mid+1);  //继续在前一子表进行查找

    }

    return 0;  //表中不存在待查元素

}

注意:循环执行条件是 low<=high ,而不是  low<high   ,

因为low=high时,查找区间还有最后一个结点,还要进一步比较。

折半查找平均查找长度:[ (n+1)/n ]   * [ log2(n+1)-1 ]


猜你喜欢

转载自www.cnblogs.com/LinQingYang/p/11780740.html