//搜索
#include<stdio.h>
int search(int a[], int len, int key)
{
int ret = -1;
int i;
for( i = 1; i < len; i++ ){
if( x == a[i] ){
ret = i;
break;
}
}
return ret;
}
int main()
{
int a[] = {1,2,34,1,54,65,2523,6,132,};
int key;
scanf("%d",&key);
int number = search( a, sizeof(a) / sizeof(a[0]), key);
printf("%d\n", number);
return 0;
}
前提 : 二分法的使用一定是排好序的
二分搜索的时间复杂度为log2N
向上取整
100 7次
1000 10次
//二分搜索
#include<stdio.h>
int search( int a[], int len, int key )
{
int left = 0;
int right = len - 1;
int mid;
int ret = -1;
while( right > left ){
mid = ( left + right ) / 2;
if ( key == a[mid] ){
ret = mid;
break;
}else if( key > a[mid] ){
left = mid + 1;
}else{
right = mid - 1;
}
}
return ret;
}
int main()
{
int a[] = {1,2,34,1,54,65,2523,6,132,};
int key;
scanf("%d",&key);
int number = search( a, sizeof(a) / sizeof(a[0]), key);
printf("%d\n", number);
return 0;
}