實現(xiàn)如下
二分查找 針對于排好序的數(shù)組進(jìn)行快速查找
思路如下:
第一步: 找到查找范圍的中間值
第二步: 中間值與查找值進(jìn)行比較:
----------------->如果兩個值相等, 則退出查找
----------------->如果中間值大于查找值, 則遞歸查找, 開始索引不變, 結(jié)束索引變?yōu)橹虚g值索引-1(必須要減掉1)
----------------->如果中間值小于查找值, 則遞歸查找, 結(jié)束索引不變, 開始索引變?yōu)橹虚g值索引+1(必須要加1)
第三步: 由于第二步的查找不到的情況會將對應(yīng)的開始值或者結(jié)束值的索引進(jìn)行加減操作, 所以這里判斷如果開始值大于結(jié)束值則表示查找不到
int binarySearch(int *a,int obj,int start, int end){
//計算中間值
int middle = start + ( end - start )/2;
if (start > end) {//沒有找到
return -1;
}
//拿出中間值進(jìn)行比較
int value = a[middle];
if (value == obj) {
return middle; //返回
}else{
if (value > obj) {//拿取左邊的值進(jìn)行比較
return binarySearch(a, obj, start, middle - 1);
}else{//拿取右邊的值進(jìn)行比較
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;
}