折半查找时间复杂度为:O(logn)
实现代码:
#include<iostream>
using namespace std;
int BinSearch(int* nums,int value,int low,int high) {
if (low > high)
return -1;
int mid = (low + high) / 2;
if (nums[mid] == value) {
return mid;
}
else if (nums[mid] > value) {
return BinSearch(nums, value, low, mid-1);
}
else {
return BinSearch(nums, value, mid+1, high);
}
}
int BinSearch2(int* nums, int value, int low, int high) {
while (low <= high) {
int mid = (low + high) / 2;
if (nums[mid] == value) {
return mid;
}
else if (nums[mid] > value) {
high = mid - 1;
}
else {
low = mid + 1;
}
}
return -1;
}
int main() {
int nums[5] = { 1,5,7,8,25 };
if (BinSearch(nums, 5, 0, 4)==-1) {
cout << "查找失败,该元素不存在" << endl;
}
else {
cout << "该元素下标为:" << BinSearch(nums, 5, 0, 4) << endl;
}
if (BinSearch(nums, 9, 0, 4) == -1) {
cout << "查找失败,该元素不存在" << endl;
}
else {
cout << "该元素下标为:" << BinSearch(nums, 5, 0, 4) << endl;
}
cout << "-----------------------" << endl;
if (BinSearch2(nums, 5, 0, 4) == -1) {
cout << "查找失败,该元素不存在" << endl;
}
else {
cout << "该元素下标为:" << BinSearch(nums, 5, 0, 4) << endl;
}
if (BinSearch2(nums, 9, 0, 4) == -1) {
cout << "查找失败,该元素不存在" << endl;
}
else {
cout << "该元素下标为:" << BinSearch(nums, 5, 0, 4) << endl;
}
return 0;
}
运行结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/82bb092a04124213992aed2954aceed6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAbHN55ZCM5a2m,size_20,color_FFFFFF,t_70,g_se,x_16)