- 题目:二分法查找
- 问题描述:用二分法查找x,找到时输出x的下标和比较次数;找不到时输出-1和比较次数。
- 算法语言描述:
输入数组和要查找的数x
- 算法描述:将一个数组分为两半,设置一个中间量a[mid]与要查找的数x比较,设置一个变量表示比较次数cnt,每次比较后cnt+1。若相等则说明中间值是要找的数,输出中间值和比较次数。若a[mid]小于x,则在数组右边继续查找,若a[mid]大于x,则在数组左边继续查找。找不到则输出-1和查找次数。
- 代码实现:
#include <iostream>
using namespace std;
int a[1009];
int main(){
int n;cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
int x;cin>>x;
int cnt=0;
int l,r,mid;l=0,r=n-1;
while(l<=r){
mid=(l+r)/2;
cnt++;
if(a[mid]==x)break;
else if(a[mid]<x){
l=mid+1;
}
else r=mid-1;
}
if(a[mid]==x){
cout<<mid<<endl;
cout<<cnt<<endl;
}
else cout<<-1<<endl<<cnt<<endl;
return 0;
}
- 时间复杂度和空间复杂度;
用了二分法搜索算法,寻找x的时间复杂度为O(logn);空间复杂度为数组空间大小,是一个常数,与变量n的取值无关。所以空间复杂度为O(1)。
- 心得:打代码正确的思路很重要,先有思路再一步一步用代码把正确的思路实现出来就很快了。还有要注意一下代码的规范性。
原文地址:https://www.cnblogs.com/Z20171003329/p/9824221.html
时间: 2024-09-29 19:38:20