码迷,mamicode.com
首页 > 其他好文 > 详细

第二章实验报告

时间:2018-10-22 00:06:53      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:pre   没有   时间复杂度   数组   定义   space   算法   退出   进入   

1.实践题目:7-1 二分查找

2、题目描述:在a[n]数组中使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

 

3、算法描述

#include<iostream>
using namespace std;

int BinarySearch(int a[], int left, int right,int x,int &count){
    count++;
    if(left == right){
        if(x == a[left])
            return left;
        else return -1;
    }
    while(left < right){
        int mid = (left + right) / 2;
        if(x == a[mid]) {
            return mid;
        }
        if(x < a[mid]) return BinarySearch(a, left, mid-1, x, count);
        if(x > a[mid]) return BinarySearch(a, mid+1, right, x, count);
    }
    }
    

int main(){
    int n, x;
    cin >> n ;
    int a[n];
    for(int i = 0; i<n; i++){
        cin >> a[i];
    }
    cin >> x;
    int count = 0;
    cout << BinarySearch(a, 0, n-1, x, count)<<endl;
    cout << count;
    return 0;
}

 

 

 4、算法时间及空间复杂度分析:利用二分递归查找找出X的下标,同时每进入一次递归,比较次数加1,这样空间复杂度为1,(并没有额外利用空间),时间复杂度为二分递归的时间复杂度 Onlog n;

 

 

 

5、心得体会:二分查找可以有效节省时间,其实这题也就是二分查找的一个小小的添加(添加了比较次数),对递归而言,考虑比较次数应从退出递归着手,同时变量定义的位置和初始值应尤为注意。

 

第二章实验报告

标签:pre   没有   时间复杂度   数组   定义   space   算法   退出   进入   

原文地址:https://www.cnblogs.com/dalili/p/9827607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!