1.非递归
# include <stdio.h>
# include <string.h>
int main ( )
{
int a[ ] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;
int sz = sizeof ( a) / sizeof ( a[ 0 ] ) ;
int k = 7 , l = 0 , r = sz - 1 , m;
while ( l <= r)
{
m = ( l + r) / 2 ;
if ( a[ m] < k)
l = m + 1 ;
else if ( a[ m] > k)
r = m - 1 ;
else
{
printf ( "找到了,该元素下标是:%d\n" , m) ;
break ;
}
}
if ( l > r)
printf ( "对不起,没有找到该元素\n" ) ;
return 0 ;
}
2.递归
1. 整型
# include <stdio.h>
# include <string.h>
int find ( int a[ ] , int l, int r, int k)
{
while ( l <= r)
{
int mid = ( l + r) / 2 ;
if ( a[ mid] < k)
return find ( a, mid + 1 , r, k) ;
else if ( a[ mid] > k)
return find ( a, l, mid - 1 , k) ;
else
return mid;
}
return - 1 ;
}
int main ( )
{
int i, a[ 100 ] , n, k;
scanf ( "%d %d" , & n, & k) ;
for ( i = 0 ; i < n; i++ )
scanf ( "%d" , & a[ i] ) ;
printf ( "找到了,下标为%d" , find ( a, 0 , n- 1 , k) ) ;
}
2. 字符型
# include <stdio.h>
# include <string.h>
# define N 10
int BinarySearch ( char str[ ] [ N] , char key[ ] , int low, int high)
{
while ( low <= high)
{
int mid = ( low + high) / 2 ;
if ( strcmp ( str[ mid] , key) == 0 )
return mid;
else if ( strcmp ( str[ mid] , key) < 0 )
return BinarySearch ( str, key, mid + 1 , high) ;
else
return BinarySearch ( str, key, low, mid - 1 ) ;
}
return - 1 ;
}
int main ( )
{
char str[ ] [ N] = { "apple" , "banana" , "cherry" , "dates" , "elderberry" , "fig" , "grape" , "honey" } ;
char key[ N] ;
printf ( "请输入要查找的字符串:" ) ;
scanf ( "%s" , key) ;
int i = BinarySearch ( str, key, 0 , 7 ) ;
if ( i == - 1 )
printf ( "未找到该字符串!\n" ) ;
else
printf ( "该字符串在数组中的位置为:%d\n" , i) ;
return 0 ;
}