二分查找又稱折半查找,優(yōu)點是比較次數(shù)少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查找方法適用于不經(jīng)常變動而查找頻繁的有序列表。首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查找關鍵字比較,如果兩者相等,則查找成功;否則利用中間位置記錄將表分成前、后兩個子表,如果中間位置記錄的關鍵字大于查找關鍵字,則進一步查找前一子表,否則進一步查找后一子表。重復以上過程,直到找到滿足條件的記錄,使查找成功,或直到子表不存在為止,此時查找不成功。
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é)果中:這個值為:%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("請輸入你要查找的數(shù)據(jù): "); scanf("%d",&num); Search(a,num,n); } return 0; } |
-
圖像處理
+關注
關注
27文章
1292瀏覽量
56743 -
算法
+關注
關注
23文章
4612瀏覽量
92884
原文標題:二分查找
文章出處:【微信號:qrsworld,微信公眾號:嵌入式單片機】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論