算法第二章实践上机实验报告

  1. 题目:二分法查找
  2. 问题描述:用二分法查找x,找到时输出x的下标和比较次数;找不到时输出-1和比较次数。
  3. 算法语言描述:

输入数组和要查找的数x

  1. 算法描述:将一个数组分为两半,设置一个中间量a[mid]与要查找的数x比较,设置一个变量表示比较次数cnt,每次比较后cnt+1。若相等则说明中间值是要找的数,输出中间值和比较次数。若a[mid]小于x,则在数组右边继续查找,若a[mid]大于x,则在数组左边继续查找。找不到则输出-1和查找次数。
  2. 代码实现:

#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;

}

  1. 时间复杂度和空间复杂度;

用了二分法搜索算法,寻找x的时间复杂度为O(logn);空间复杂度为数组空间大小,是一个常数,与变量n的取值无关。所以空间复杂度为O(1)

  1. 心得:打代码正确的思路很重要,先有思路再一步一步用代码把正确的思路实现出来就很快了。还有要注意一下代码的规范性。

猜你喜欢

转载自www.cnblogs.com/Z20171003329/p/9824221.html