目录
1.需求背景
- 总刷题,二分查找在有序数组的相关应用不少,已经默背下来是入门水平了。
2.解决方案
- 以升序整型数组为例,查找数字n在数组中的下标
- 遍历的时间复杂度是O(n)
- 二分查找的时间复杂度是O(logn)
private int FindNIndex(int[] numbers, int n){
int index = -1;
int l=0,r=numbers.Length-1;
while(l<=r){
int mid = (l+r)/2;
if(numbers[mid]==n){
index = mid;
break;
}else if(numbers[mid]<n){
l = mid+1;
}else if(numbers[mid]>n){
r = mid-1;
}
}
return index;
}
3.时间复杂度分析
二分查找在最坏的情况下依次是n/2,n/4,n/8... n/2^k一直查到1为止。k就是执行的次数
- = 1
- n=2^k
- k=logn
所以二分查找的时间复杂度是O(logn),在有序数组中的搜索应用非常的广泛且实用。