一点点小心得
这个求数组的长度大小,不能在那个方法里面去求,因为数组传过去之后,本质上传过去的是数组首元素的地址,所以如果在方法里面求大小,那判断的字节是指针的,所以肯定是求不出来的
然后这个查找方法就是,每次取数组中间的数和目标数进行比较,要是中间的数比目标数小,就往右边缩小范围,zuo就等于刚刚的中间数,然后zuo+you/2再来求新的中间数再去和目标数进行比较。循环往复,当中间数和目标数重合了,那说明就是找到了。
/**
* 二分法查找
*/
int chazhao(int ar[], int i, int size) {
int zuo = 0;
int you = size - 1;
while (zuo <= you) {
int mid = (zuo + you) / 2;
if (ar[mid] < i) {
zuo = mid+1;
} else if (ar[mid] > i) {
you = mid-1;
} else {
return mid;
}
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int i = 7;
int size = sizeof(arr) / sizeof(int);
int tt = chazhao(arr, i, size);
if (tt != -1) {
printf("这个数存在,下标是:%d", tt);
} else {
printf("这个数不存在");
}
return 0;
}