/*
先定数组长度,无法获取一个Int数组的真实长度 如 int a[20]={1,2}
实际长度是多少呢? sizeof(a)/sizeof(a[0])是算不出来的!只能自己写函数了!
注意,二分查找是查找一个有序的序列,这里的演示的有序,有两种
1、bindSearch函数自身提供的数组(索引器)的下标有序,废话,数组本来就有序。
2、被查找的数据的索引也要有序,什么意思?看一个json结构
[
{
id:1,name:mike
},
{
id:2,name:rock
},
]
所以这里的id必须排序
*/
void bindSearch() {
/* low ---- mid------higt */
int low = 0,
higt,
mid = 0,
len,
a[] = { 1,3,4,12,13,15 },
key=1;
len = sizeof(a) / sizeof(a[0]) - 1;
higt = len-1;
if (len <= 0) {
printf("折半查找!至少两个数据嘛!\n", len, mid);
return;
}
while (low <= higt) {
mid = (low + higt) / 2 ;
printf("当前数组长度=>%d,mid=>%d\n", len, mid);
if ( a[mid] == key ) {
printf("已经找到\n");
return;
}else if( a[mid] < key ){
low = mid + 1;
}else if (a[mid] > key) {//大于key
higt = mid - 1;
}else {
printf("抱歉怕是出了一些奇怪的问题!\n");
return;
}
}
printf("抱歉啥也没有!\n");
}
来源:https://www.cnblogs.com/cfas/p/12359797.html