當前位置:成語大全網 - 漢語詞典 - c語言使用二分法查找關鍵字

c語言使用二分法查找關鍵字

# include & ltstdio.h & gt

# 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次的平均對比簡直是天壤之別!所以掌握二分法對於龐大的數組庫中的處理是非常有效的!