1. 程式人生 > 程式設計 >C語言實現折半查詢法(二分法)

C語言實現折半查詢法(二分法)

折半查詢法也叫做二分查詢,顧名思義,就是把資料分成兩半,再判斷所查詢的key在哪一半中,再重複上述步驟知道找到目標key;

注意:折半查詢法僅適用於對已有順序的陣列、資料進行操作!!!

很顯然,折半查詢法相對於其他查詢方法例如順序查詢法效率要高很多;

下面我們來實際操作一下,瞭解二分查詢的奧義。

例如:要在陣列arr[]={8,7,9,6,4,1,2,5,3,10,11};中查詢key=7的位置;首先,我們要先將陣列arr中的資料成員進行排序。arr[]={1,8,11};

C語言實現折半查詢法(二分法)

如圖所示:將該組資料小端記作low,大端記作high,中間值記作mid;
二分法查詢時,將所查詢的key與mid比較,例如key=7,即可縮小查詢範圍在mid和high之間;

C語言實現折半查詢法(二分法)

如圖所示即可找到key=low=7;

注意: (敲黑板)如果中間數mid不是整數,需要進行取整。

程式碼如下:

#include<stdio.h>
int BinSearch(int arr[],int len,int key)             //折半查詢法(二分法)
{
 int low=0;             //定義初始最小
 int high=len-1;         //定義初始最大
 int mid;              //定義中間值
 while(low<=high)
 {
 mid=(low+high)/2;       //找中間值
 if(key==arr[mid])        //判斷min與key是否2020111122411718相等
  return mid;  
 else if(key>arr[mid])       //如果key>mid 則新區間為[mid+1,high]
  low=mid+1;
 else                    //如果key<mid 則新區間為[low,mid-1]
  high=mid-1;
 }
 return -1;               //如果陣列中無目標值key,則返回 -1 ;
}
int main()
{
 int arr[]={1,11};           //首先要對陣列arr進行排序
 printf("%d \n",BinSearch(arr,(sizeof(arr)/sizeof(arr[0])),7));
 return 0;
}

執行結果如下:

C語言實現折半查詢法(二分法)

希望對您有所幫助!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。