數據結構之折半查找


數據結構之--折半查找

定義:折半查找技術,也就是二分查找。它的前提是線性表中的記錄必須是關鍵碼有序(通常從大到小有序),線性表必須采用順序存儲。折半查找的基本思想是:取中間記錄作為比較對象,若給定值與中間記錄的關鍵字,則在中間記錄的關鍵字相等,則查找成功;若給定值小於中間記錄的作伴去繼續查找;若給定值大於中間記錄的關鍵字,則在中間記錄的右半區繼續查找。不斷重復上述過程,直到查找成功,或所有查找區域無記錄,查找失敗為止。

圖解

時間復雜度:由於具有n個節點的完全二叉樹的深度為⌊log₂n⌋+1,盡管折半查找判定二叉樹並不是完全二叉樹,但同樣相同的推導可以得出,最壞的情況查找到關鍵字或者查找失敗的次數為⌊log₂n⌋+1。因此我們折半算法的時間復雜度為:O(logn),它顯然遠遠好於順序查找的O(n)的時間復雜度了。

#include<stdio.h>

int Binary_Search(int *a,int n,int key){

  int low,mid,high;

  low = 1;                      /*定義最低下表為記錄首位*/

  high = n;                      /*定義最高下表為記錄末位*/

  while(low<=high){

    mid=(low+high)/2;              /*折半*/

    if(key<a[mid])                 /*若查找值比中值小*/

      high=mid-1;                /*最高下標調整到中位下標小一位*/

    else if(key>a[mid])                ​/*若查找值比中值大*/

      low=mid+1;                  ​/*最低下標調整到中值位下標大一位*/

    else

      return mid;                   ​/*若相等說明mid即為查找到的位置*/

  }

  return 0;

}

void main(){

  int num[] = {0,1,16,24,35,47,59,62,73,88,99};

  int result = Binary_Search(num,sizeof(num)/sizeof(num[0])-1,62);

  printf("查找結果為:%d\n",result);

}

運行結果為: 

 


免責聲明!

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



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