折半查找(二分查找)
1.数据必须有序
#include <iostream>
using namespace std;
int BinarySearch(int *,const int,const int);
int main()
{
int array[]{1,2,3,4,5,6,7,8,9,10};
int numIndex = 7;
int result;
result = BinarySearch(array,10,numIndex);
if(result == -1){
cout<<"没找到!"<<endl;
}else{
cout<<"在array["<<result<<"]找到"<<numIndex<<endl;
}
cout << "Hello world!" << endl;
return 0;
}
//折半查找
int BinarySearch(int *a,const int n,const int x){
int low = 0;
int high = n-1;
int midIndex;
//此循环用于从小到大。从大到小要改else if
while(low<=high){
midIndex = (low+high)/2;
if(a[midIndex] == x){
return midIndex;
}else if(a[midIndex]<x){
low = midIndex + 1;
}else if(a[midIndex]>x){
high = midIndex-1;
}
}
return -1;
}
此为从小到大排序查找
从大到小代码核心代码为
if(a[midIndex] == x){
return midIndex;
}else if(a[midIndex]<x){
low = midIndex + 1;
}else if(a[midIndex]>x){
high = midIndex-1;
}
时间复杂度
假设总共有N个元素:
第 1 次折半: 还剩 N/2 个元素,
第 2 次折半: 还剩 N/4 个元素,
第 3 次折半: 还剩 N/8 个元素,
……
第 K 次折半: 还剩 N/2k 个元素,
最坏的情况:第 K 次折半后还剩一个元素,即:
N/2k = 1
2k = N
k = log2N
所以最坏为:O(log2N) 也可以表示为:O(logN)
最好情况:O(1)
本文深入讲解了二分查找(折半查找)算法的实现过程,包括C++代码示例及时间复杂度分析。通过具体实例展示了如何在有序数组中进行高效搜索,并详细解释了其时间复杂度为O(logN)的原因。
747

被折叠的 条评论
为什么被折叠?



