/* 先定数组长度,无法获取一个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