int binary_search(int arr[], int key,int sz) {//本质上这个形参arr接收的是一个指针;因为指针才能接收地址;
//int sz = sizeof(arr) / sizeof(arr[0]);//指针大小在64位机上是8个字节,一个整型是4个字节,所以sz为2;这句代码之所以注释掉,因为把他放在此处,得不到它本应得到的结果.要放在main函数里.
printf("%d\n", sz);
int h = 0;
int t = sz-1;
printf("%d\n", t);
while (h<=t)
{
int mid = (h+t) / 2;
if (arr[mid]==key)
{
return mid;
}
else if (arr[mid] > key) {
t = mid - 1;
}
else if (arr[mid]<key)
{
h = mid + 1;
}
}
return -1;
}
int main() {
int arr[] = {1,2,3,4,5,6,7,8,52,64,97,100};
int k = 8;
int sz = sizeof(arr) / sizeof(arr[0]);
int res = binary_search(arr, k,sz);//通常来讲,传参传的是实参的一份拷贝;但数组作为参数传递时,由于不清楚数组到底有多大,再拷贝一份实属浪费内存空间;所以传递数组时,实际传递的是数组中首元素的地址.
if (res!=-1) {
printf("找到了,下标是%d", res);
}
else if(res==-1)
{
printf("不存在!");
}
return 0;
}
C语言实现二分查找
最新推荐文章于 2024-10-14 20:27:15 发布