一个整型有序数组,完成二分查找
思路:待查找数字和中间的数字比较,如果比中间的数字小,则在前半段继续查找,如果比中间的数字大,则在后半段继续查找
C++
.h文件
#ifndef BinarySearch_h
#define BinarySearch_h
#include <stdio.h>
#endif /* BinarySearch_hpp */
/*
arr为待查找数据
low为数组最小的序号
high为数组最大的序号
target为待查找数字
返回值0代表找到,返回值-1代表没有找到
*/
int searchNumber(int arr[], int low, int high, int target);
.cpp文件
#include "BinarySearch.h"
int searchNumber(int arr[], int low, int high, int target)
{
if (arr == NULL || low > high) {
return -1;
}
while (low <= high) {
int mid = (low + high) / 2;
if (arr[mid] == target) {
return 0;
} else if (arr[mid] > target) {
//target小于中间的数字,右侧边界收缩
high = mid - 1;
} else {
//targe大于中间的数字,左侧边界收缩
low = mid + 1;
}
}
return -1;
}
main函数
#include <iostream>
#include "BinarySearch.h"
int main(int argc, const char * argv[]) {
int arr[] = {1,2,3,4,5,6,7,8,9};
int result = searchNumber(arr, 0, 8, 5);
std::cout<<result<<std::endl;
return 0;
}