首页 > 编程语言 > 详细

算法第二章上机实践报告

时间:2019-09-27 00:01:21      阅读:89      评论:0      收藏:0      [点我收藏+]
一、实践题目:
7-1 二分查找 
 
二、问题描述:

输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

 

三、算法描述:

#include <iostream>
#include <stdlib.h>
using namespace std;
int BS(int a[],int n,int x){
    int low,high,mid;
    low=0;
    high=n-1;
    int count=0;
    while(low<=high)
    {
        mid=(low+high)/2;
        count++;
        if(x==a[mid]){
        
        cout<< mid<<endl;
        cout<< count;
        return 0;
    }
        else if(x<a[mid]){
        
        high=mid-1;
    }
        else{
        low=mid+1;
    }}
    cout<< -1<<endl;
    cout<< count;
    return 0;
}

int main() {
    int n;
    cin>> n;
    
    int a[1000];
    for(int i=0;i<n;i++)
    {
        cin >> a[i];
    }
    int x;
    cin >> x;
    BS(a,n,x);
    system("pause");
}
通过寻找值先与数组中的中间值作比较,再以中间值与边界值的区间为新的范围。重复以上比较,直到找到要寻找的数值,若不存在即输出-1。在其中,可以设一个初始值,寻找数值每与中间值比较一次,即自身+1,以此获得比较次数。最后找到寻找数值后输出下标。
 
四、算法时间及空间复杂度分析:
二分查找法即是将问题分为两个小块,所以时间复杂度为:T(n) = T(n/2) +O(1)=O(logn)
由于数组空间是常数,所以空间复杂度为O(1)。
 
五、心得体会:
因为这次是我的第一次上机实践。迫切想解决第二题,可是其实第二题就在第一题的基础之上。所以让我想到二分算法也是如此,把大问题变成较小问题,再如此分下去。
二分算法,把中间值作为比较,把问题的解决范围减小,大大减少了程序的执行时间。
老师实行的一人打代码一人讲解代码的方法也很好,让我们对算法了解更加深刻。

算法第二章上机实践报告

原文:https://www.cnblogs.com/mi1es/p/11594813.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!