折半查找


折半查找

  1. 算法思想
  2. 算法實現
  3. 查找判定樹
  4. 折半查找效率

折半查找的算法思想

折半查找,又稱“二分查找”,僅適用於有序順序表

33>mid,往右查

右指針到一個位置就-1,左指針到一個位置就+1

low>high,查找失敗

折半查找的實現

typedef struct{
    ElemType *elem;
    int TableLen;
}SSTable;

//折半查找(升序)
int Binary_Search(SSTable L,ElemType key){
    int low = 0,high = L.TableLen-1,mid;
    while(low<=high){
        mid = (low+high)/2;				//取中間位置
        if(L.elem[mid] == key)
            return mid;					//查找成功則返回所在位置
        else if(L.elem(mid)>key)
            high = mid -1;				//從前半部分繼續查找
        else
            low = mid +1;				//從后半部分繼續查找
    }
    return -1;							//查找失敗,返回-1
}

順序表擁有隨機訪問的特性,鏈表沒有

查找效率復分析

查找判定樹的構造

如果當前low和high之間有奇數個元素,則mid分隔后,左右兩個部分元素個數相等

如果當前low和high之間有偶數個元素,則mid分隔后,左半部分比右半部分少一個元素

折半查找的判定樹中,若 mid=向下取整(low+high)/2,對於任何一個結點,必有:右子樹結點-左子樹結點=0或1

自己過一遍順序,1個元素,2個元素,。。。

折半查找的判定樹一定是平衡二叉樹

因此,元素個數為n時

\[樹高h=\lceil log_2(n+1) \rceil \]

計算完全二叉樹也相同

滿足二叉排序樹的定義

失敗節點:n+1個,等於成功結點的空鏈域數量

知識回顧

大部分情況下折半查找速度都比順序查找快。但是不一定哦

從上去整,不一樣哦,左邊的比較多


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM