二分查找又稱折半查找,優(yōu)點(diǎn)是比較次數(shù)少,查找速度快,平均性能好;其缺點(diǎn)是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用于不經(jīng)常變動(dòng)而查找頻繁的有序列表。首先,假設(shè)表中元素是按升序排列,將表中間位置記錄的關(guān)鍵字與查找關(guān)鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個(gè)子表,如果中間位置記錄的關(guān)鍵字大于查找關(guān)鍵字,則進(jìn)一步查找前一子表,否則進(jìn)一步查找后一子表。重復(fù)以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時(shí)查找不成功。
search.h
#ifndef _SEARCH_H_ #define _SEARCH_H_ void Search(int *a,int num,int n); #endif |
search.c
#include #include "search.h" /************************************** 函數(shù)的名:search 函數(shù)的功能:二分查找 函數(shù)的參數(shù):空 作者: 日期: ******************************************/ 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("查找的結(jié)果中:這個(gè)值為:%d ",num); } else { printf("查找沒有這個(gè)值 "); } } |
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("請(qǐng)輸入你要查找的數(shù)據(jù): "); scanf("%d",&num); Search(a,num,n); } return 0; } |
-
圖像處理
+關(guān)注
關(guān)注
27文章
1320瀏覽量
57529 -
算法
+關(guān)注
關(guān)注
23文章
4682瀏覽量
94372
原文標(biāo)題:二分查找
文章出處:【微信號(hào):qrsworld,微信公眾號(hào):嵌入式單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于Simulink的視頻與圖像處理算法的快速實(shí)現(xiàn)
基于C語言二分查找排序源代碼
有趣的圖像處理算法
圖像處理算法的優(yōu)化

詳解C語言二分查找算法細(xì)節(jié)

二分搜索算法運(yùn)用的框架套路
如何理解二分查找算法

FPGA設(shè)計(jì)中二分法查表算法的實(shí)現(xiàn)

評(píng)論