#include
int binary_search(int arr[],int k,int sz)
//这里数组实质上是一个指针
{
//折半查找
//int sz = sizeof(arr)/sizeof(arr[0]); //求不出数组长度
int low = 0; //数组下标从0开始
int high = sz - 1;
int mid = 0; //中间元素下标
while(low <= high)
{
mid = (low + high)/2; //取下界
if(k == arr[mid])
return mid;
else if(k < arr[mid])
high = mid - 1;
else
low = mid + 1;
}
return -1;
}
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
int sz = sizeof(arr)/sizeof(arr[0]);
int ret = binary_search(arr,k,sz);
//数组传参时只传入第一个元素的地址
if(ret == -1)
printf("找不到\n");
else
printf("找到了,下标为%d\n ",ret);
return 0;
}
注意:在binary_search()函数体内求数组的长度时,得不到实际的数组长度。因为在传入参数时,数组只传入了首元素的地址,实质上是一个指针,所以在binary_search()函数体内求数组长度,求的是仅含首元素的长度。解决方法:在main()函数内先求出数组长度,再传给binary_search()函数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)