二分查找又稱折半查找,優點是比較次數少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用于不經常變動而查找頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個子表,如果中間位置記錄的關鍵字大于查找關鍵字,則進一步查找前一子表,否則進一步查找后一子表。重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。
search.h
#ifndef _SEARCH_H_ #define _SEARCH_H_ void Search(int *a,int num,int n); #endif |
search.c
#include #include "search.h" /************************************** 函數的名:search 函數的功能:二分查找 函數的參數:空 作者: 日期: ******************************************/ void Search(int *a,int num,int n) { int left = 0; int right = n-1; int mid = (left+right)/2; while(a[mid] != num&&left if(a[mid] >num) { right = mid -1; } else if(a[mid] < num) { left = mid +1; } mid = (left+right)/2; } if(a[mid] == num) { printf("查找的結果中:這個值為:%d ",num); } else { printf("查找沒有這個值 "); } } |
main.c
#include #include "search.h" int main () { int a[] = {30,44,66,22,48,89,100,20,1,3,6,88}; int n = sizeof(a)/sizeof(int); int i,j; for(i = 0;i for(j = 0;j if(a[j]>a[j+1]) { int tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } } } for(i = 0;i printf(" %d",a[i]); } printf(" "); int num; while(1) { printf("請輸入你要查找的數據: "); scanf("%d",&num); Search(a,num,n); } return 0; } |
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
圖像處理
+關注
關注
27文章
1292瀏覽量
56744 -
算法
+關注
關注
23文章
4612瀏覽量
92886
原文標題:二分查找
文章出處:【微信號:qrsworld,微信公眾號:嵌入式單片機】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
基于Simulink的視頻與圖像處理算法的快速實現
基于Simulink的視頻與圖像處理算法的快速實現
主要內容
視頻和圖像系統設計基于模型的設計視頻和圖像
發表于 04-29 14:00
?0次下載
二分搜索算法運用的框架套路
我們前文 我作了首詩,保你閉著眼睛也能寫對二分查找 詳細介紹了二分搜索的細節問題,探討了「搜索一個元素」,「搜索左側邊界」,「搜索右側邊界」這三個情況,教你如何寫出正確無 bug 的二分
如何理解二分查找算法
本文就來探究幾個最常用的二分查找場景:尋找一個數、尋找左側邊界、尋找右側邊界。
而且,我們就是要深入細節,比如不等號是否應該帶等號,mid 是否應該加一等等。分析這些細節的差異以及出現這些差異的原因,保證你能靈活準確地寫出正確的二
評論