前提:數組中的數字是有序的,如從小到大,或從大到小。
/*
二分法搜索
*/
#include <stdio.h>
int main(void)
{
const int length = 100;
int num[length]; // 數組聲明
int i;
for ( i=0; i<length; i++ ) // 數組賦值
{
num[i] = i;
}
for ( i=0; i<length; i++ ) // 遍歷數組並且顯示
{
printf("%d ", num[i]);
}
printf("\n");
int k;
scanf("%d", &k); // 輸入一個數字
int left = 0;
int right = length - 1;
int ret = -1;
while ( right >= left ) // 注意這裏的循環條件
{
int mid = ( left + right ) / 2;
printf("%d ", num[mid]);
if ( num[mid] == k )
{
ret = mid;
break;
}
else if ( num[mid] > k )
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
printf("\n");
if ( ret != -1 )
{
printf("%d在第%d位上\n", k, ret);
}
else
{
printf("not found !\n");
}
return 0;
}