小白算法積累——折半查找1#折半查找+遞歸算法

題目:寫出折半查找的遞歸算法。初始調用時,low爲1,high爲ST.Length

關鍵字: 折半查找,遞歸算法

思路:
根據查找的起始位置和終止位置,將查找序列一分爲二,判斷所查找的關鍵字在哪一部分,然後用新的序列的起始位置和終止位置遞歸求解。
首先,確定所需變量
查找表ST,查找目標key,查找起始位置low 和查找終止位置high
(因爲本題使用遞歸算法,說明查找的起始位置和終止位置一直在遞歸變化,所以需要設爲變量)

其次,設計遞歸出口
即查找結束的情況:
1.查找失敗的條件:low>high
2.查找成功的條件:ST.mid==key

分析: 算法把規模爲n的複雜問題經過多次遞歸調用轉化爲規模減半的子問題求解。
時間複雜度爲O(log2 n,)
算法中用到了一個遞歸工作棧,其規模與遞歸深度有關,也是O(log2 n)

代碼:

typedef struct{
    ElemType *elem;
    int length;
}SSTable;
int BinSearchRec(SSTable ST,ElemType key,int low,int high){//在有序表中遞歸折半查找其關鍵字爲key的元素,返回其在表中序號
    if (low>high)//查找失敗,key不在查找表中
       return 0;
    mid=(low+high)/2;//取中間位置
    if(key>ST.elem[mid])//向後半部分查找
       BinSearchRec(ST,key,mid+1;high);
    else if(key<ST.elem[mid])//向前半部分查找
       BinSearchRec(ST,key,low,mid-1);
    else //查找成功
        return mid;   
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章