C語言實現(xiàn)折半查找法(二分法)
折半查找法也叫做二分查找,顧名思義,就是把數(shù)據(jù)分成兩半,再判斷所查找的key在哪一半中,再重復(fù)上述步驟知道找到目標(biāo)key;
注意:折半查找法僅適用于對已有順序的數(shù)組、數(shù)據(jù)進行操作?。?!
很顯然,折半查找法相對于其他查找方法例如順序查找法效率要高很多;
下面我們來實際操作一下,了解二分查找的奧義。
例如:要在數(shù)組arr[]={8,7,9,6,4,1,2,5,3,10,11};中查找key=7的位置;首先,我們要先將數(shù)組arr中的數(shù)據(jù)成員進行排序。arr[]={1,2,3,4,5,6,7,8,9,10,11};
如圖所示:將該組數(shù)據(jù)小端記作low,大端記作high,中間值記作mid;
二分法查找時,將所查找的key與mid比較,例如key=7,即可縮小查找范圍在mid和high之間;
如圖所示即可找到key=low=7;
注意: (敲黑板)如果中間數(shù)mid不是整數(shù),需要進行取整。
代碼如下:
#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 則新區(qū)間為[mid+1,high] low=mid+1; else //如果key<mid 則新區(qū)間為[low,mid-1] high=mid-1; } return -1; //如果數(shù)組中無目標(biāo)值key,則返回 -1 ; } int main() { int arr[]={1,2,3,4,5,6,7,8,9,10,11}; //首先要對數(shù)組arr進行排序 printf("%d \n",BinSearch(arr,(sizeof(arr)/sizeof(arr[0])),7)); return 0; }
運行結(jié)果如下:
希望對您有所幫助!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++中隱式類型轉(zhuǎn)換學(xué)習(xí)筆記
在本篇文章里小編給大家整理的是一篇關(guān)于C++中隱式類型轉(zhuǎn)換學(xué)習(xí)筆記內(nèi)容,有興趣的跟著小編來學(xué)習(xí)下吧。2020-02-02Qt利用QState狀態(tài)機實現(xiàn)控件互斥操作詳解
這篇文章主要為大家詳細介紹了Qt如何利用QState狀態(tài)機實現(xiàn)控件互斥操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12