# include & ltstdlib.h & gt
#定義大小15
int main()
{
int binarySearch(int [],int,int,int);
void print header(void);
void printRow(int [],int,int,int);
int a[Size],I,key,element
for(I = 0;我& lt= Size-1;i++)
a[I]= 2 * I;
printf("輸入壹個0到28之間的數字:");
scanf("%d ",& amp關鍵);
print header();
element=binarySearch(a,key,0,Size-1);
如果(元素!=-1)
printf("\n在數組元素%d中找到了%d!\n”,key,element);
其他
printf("\n找不到%d!\n ",鍵);
系統(“暫停”);
}
void printHeader()
{
int I;
printf(" \ n subscripts:\ n ");
for(I = 0;我& lt= Size-1;i++)
printf("%3d ",I);
printf(" \ n ");
for(I = 1;我& lt= 4 *大小;i++)
printf("-");
printf(" \ n ");
}
int binarySearch(int array[],int searchKey,int low,int high)
{
void printRow(int array[],int low,int middle,int high);
int中間;
while(low & lt;=高){
中=(低+高)/2;
printRow(數組,低,中,高);
if(searchKey==array[middle])
返回中間;
else if(search key & lt;數組[中間])
高=中-1;
其他
低=中+1;
}
return-1;
}
void printRow(int array[],int low,int middle,int high)
{
int I;
for(I = 0;我& lt= Size-1;i++)
如果(我& lt低| | i & gt高)
printf(" ");
else if(i==middle)
printf("%3d* ",array[I]);
其他
printf("%3d ",array[I]);
printf(" \ n ");
}
效率分析:線性搜索擺脫了數組排序的約束,缺點是不適合大規模數據搜索,搜索方式比較老套。如果要搜索的數是數組中的最後壹個數N,那麽從0開始搜索,遍歷N次,時間復雜度為O(n)。在二分搜索法方法中,如果搜索關鍵字小於數組中間的元素,則搜索數組的前半部分,否則搜索數組的後半部分。時間復雜度:O(log2N),如果在指定的子數組中還沒有找到關鍵字,那麽子數組將再次減半,重復這個搜索,直到要找的關鍵字等於子數組中間的元素,或者沒有找到關鍵字。最壞的情況下,用二分法尋找壹個1024個元素的數組,只需要比較10次,即1024除以2,再連續除以10次,得到1。如果有1048576個元素,請使用。然而,簡單的線性搜索需要2的20次方搜索。可見二分法的效率遠高於線性搜索。對於壹個654.38+0億個元素的數組來說,5億次和30次的平均對比簡直是天壤之別!所以掌握二分法對於龐大的數組庫中的處理是非常有效的!