实现如下
二分查找 针对于排好序的数组进行快速查找
思路如下:
第一步: 找到查找范围的中间值
第二步: 中间值与查找值进行比较:
----------------->如果两个值相等, 则退出查找
----------------->如果中间值大于查找值, 则递归查找, 开始索引不变, 结束索引变为中间值索引-1(必须要减掉1)
----------------->如果中间值小于查找值, 则递归查找, 结束索引不变, 开始索引变为中间值索引+1(必须要加1)
第三步: 由于第二步的查找不到的情况会将对应的开始值或者结束值的索引进行加减操作, 所以这里判断如果开始值大于结束值则表示查找不到
int binarySearch(int *a,int obj,int start, int end){
//计算中间值
int middle = start + ( end - start )/2;
if (start > end) {//没有找到
return -1;
}
//拿出中间值进行比较
int value = a[middle];
if (value == obj) {
return middle; //返回
}else{
if (value > obj) {//拿取左边的值进行比较
return binarySearch(a, obj, start, middle - 1);
}else{//拿取右边的值进行比较
return binarySearch(a, obj, middle + 1, end);
}
}
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
int a[] = {1,2,3,4,5,6,7,8,9,10};
int n = sizeof(a)/sizeof(int);
int obj = 1;
int result = binarySearch(a, obj,0,n-1);
if (result == -1) {
printf("未找到\n");
}else{
printf("找到了%d\n",result);
}
}
return 0;
}
网友评论