首页 > 编程语言 > 详细

算法第二章上机实践报告

时间:2019-09-23 09:51:49      阅读:84      评论:0      收藏:0      [点我收藏+]
  1. 实践题目:7-1 二分查找
  2. 问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。
  3. 算法描述:

首先把有n个元素的排好序的数组a分成两半,每次把第n/2个与要搜索的数x进行比较,如果相等,则比较成功。如果a[n/2]<x,则继续搜索数组的左半部分,如果a[n/2]>x,则搜索数组的右半部分,重复循环记录次数直到比较成功。如果在数组中找不到x元素,则返回-1.

int BinarySearch(int a[],int x,int n)

{

    int l=0,r=n-1;

    while(l<=r)

    {

        int m=(l+r)/2;

        if(x==a[m]) cout<<m<<endl;

        if(x>a[m]) l=m+1;//继续在左半部分查找

        else r= m-1;//继续在右半部分查找

         p++;//p为比较次数

         if(x!=a[m]&&l>r) cout<<-1<<endl;//找不到时返回-1

    }



  1. 算法时间及空间复杂度分析(要有分析过程):

时间复杂度:每执行一次循环,数组长度减小一半,其中把数组分成一半的时间复杂度为O(1)

T(n) = O(1) + T(n/2)

T(n) = O(1) + logn

O(n) = logn

空间复杂度:O(1),辅助空间是常数级别的

  1. 心得体会(对本次实践收获及疑惑进行总结):
    (1)在本次实践中,体会到了在编写代码时,不仅仅要考虑功能的实现,且要对算法进行时间复杂度的分析,谨慎使用循环语句。

(2)还体会到了对程序的实践过程要有清晰的理解,如在题目中要考虑对比较次数的统计,如何快速分析以便做到减少语句的执行次数且结果准确,就需要对各种情况的输入程序执行的语句有清楚的认识。

算法第二章上机实践报告

原文:https://www.cnblogs.com/alqq/p/11570614.html

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