实践报告算法第二章实践报告

lhiscute lhiscute     2023-01-08     413

关键词:

实践报告任选一题进行分析。

 

1.实践题目:

  7-1 二分查找 

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

  输入格式:输入共三行: 第一行是n值; 第二行是n个整数; 第三行是x值。

  输出格式:输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。

 

2.问题描述:

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

 

3.算法描述:

  首先,我们将n个非降序排列的整数存入数组中,方便后续的操作与比较。然后采用while循环,将要查找的数x与数组中间值进行多次比较,如果和a[n/2]相等则找到,该算法终止。如果x<a[n/2],则只在数组a的左半部分继续搜索即可,反之就在a数组的右半部分搜索,直至找到该数字,同时用一个变量count记录每一次查找比较的次数用来最后输出。                          

 

4.算法时间及空间复杂度分析:

时间复杂度:每执行一次while循环,被搜索数组的大小就从原来的n缩减为原来的一半(n/2),最优情况是一次就找到要查找的数复杂度为O(1),最坏的情况是循环直到最后一个才找到要查找的数,复杂度为O(logn)。

空间复杂度:我们采用的二分法算法为非递归算法,其空间复杂度为O(1)

 

5.心得体会(对本次实践收获及疑惑进行总结):

  本次结对编程的实践,让我收获了特别多,

在解题过程中,一开始我的审题总是比较大意,没看清楚题目就开始要编程,一开始还以为我们需要先对数据进行排序,然后再进行二分查找。幸好菲凡及时提醒我原本数据就是已经排好序的,才让我免去做无用功的时间,有队友的感觉真好。然后在编程的过程中,菲凡有时会出现一些语法错误,我也能及时帮她指正,我们共同体会到和同伴一起思考一起讨论,然后解决问题的那种成就感,这让我体会到编程不一样的乐趣。另一方面,我也在实践中充分理解与掌握了课本中的算法知识,真正在实践中学习,在实践中明确自己的不足,一点点一点点进步。

 

PS:代码展示

#include<iostream>
using namespace std;
int main()
  int n,x;
  cin>>n;
  if(1<=n&&n<=1000)
  int a[n];
  for(int i=0;i<n;i++) cin>>a[i];
  cin>>x;
  int count = 0;
  int left = 0;
  int right = n-1;
  while(left<=right)
    count++;
    int mid = (left+right)/2;
    if (x==a[mid])
      cout<<mid<<endl<<count;
      return 0;
      
    if (x>a[mid]) left=mid + 1;
      else right= mid -1;
      
    cout<<"-1"<<endl<<count;
    
    return 0;
    


























算法第二章上机实践报告

实践报告任选一题进行分析。内容包括:1.实践题目  7-2 改写二分搜索算法 (20分)题目来源:《计算机算法设计与分析》,王晓东设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回... 查看详情

算法第二章上机实践报告

内容包括:实践题目问题描述算法描述算法时间及空间复杂度分析(要有分析过程)心得体会(对本次实践收获及疑惑进行总结)1.实践题目:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查... 查看详情

算法第二章实践报告

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

实践算法第二章上机实践报告(代码片段)

1.实践题目7-3两个有序序列的中位数 2.问题描述已知有两个等长的非降序序列S1,S2,设计函数求S1与S2并集的中位数。有序序列A?0??,A?1??,?,A?N?1??的中位数指A?(N?1)/2??的值,即第?(N+1)/2?个数(A?0??为第1个数)。Input在一行中输出两个... 查看详情

算法第二章上机实践报告

实践题目:改写二分搜索算法 问题描述:设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的... 查看详情

算法第二章上机实践报告

 实践题目: 二分查找问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。算法描述:原始数据是无... 查看详情

算法第二章上机实践报告

1.实践题目:7-1二分查找2.问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。3.算法描述:首先,二分查找... 查看详情

算法第二章实践报告

1.    实践题目7-3两个有序序列的中位数(20分)已知有两个等长的非降序序列S1,S2,设计函数求S1与S2并集的中位数。有序序列A?0??,A?1??,?,A?N?1??的中位数指A?(N?1)/2??的值,即第?(N+1)/2?个数(A?0??为第1个数)。 2. &n... 查看详情

算法第二章上机实践报告

1.实践题目  7-1二分查找2.问题描述  输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。 3.算法描述&n... 查看详情

算法第二章上机实践报告

1.实践题目:7-1二分查找2.问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。3.算法描述:首先,二分查找... 查看详情

算法第二章上机实践报告

1、实践题目:二分查找2、问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。3、算法描述:二分查找——... 查看详情

算法第二章实践报告

1.    实践题目7-3两个有序序列的中位数(20分)已知有两个等长的非降序序列S1,S2,设计函数求S1与S2并集的中位数。有序序列A?0??,A?1??,?,A?N?1??的中位数指A?(N?1)/2??的值,即第?(N+1)/2?个数(A?0??为第1个数)。2.  &n... 查看详情

算法第二章上机实践报告

1.实践题目两个有序序列的中位数 2.问题描述已知有两个等长的非降序序列S1,S2,设计函数求S1与S2并集的中位数。有序序列A?0??,A?1??,?,A?N?1??的中位数指A?(N?1)/2??的值,即第?(N+1)/2?个数(A?0??为第1个数)。3.算法描述  4.算法... 查看详情

算法第二章上机实践报告

1.实践题目:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。2.问题描述:通过二分搜索技术,找出数组中与x数值相... 查看详情

算法第二章上机实践报告

1.实践题目:最大子列和问题2.问题描述:给定K个整数组成的序列N1,N2,...,NK,“连续子列”被定义为N?i,Ni+1,...,Nj,其中1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列-2,11,-4,13,-5,-2,其连续... 查看详情

算法第二章上机实践报告

实践题目:两个有序序列的中位数问题描述:已知有两个等长的非降序序列S1,S2,设计函数求S1与S2并集的中位数。有序序列,的中位数指A?(N?1)/2??的值,即第?个数(A?0??为第1个数)。算法描述 输入两个非降序数列到两个长度相同... 查看详情

算法第二章上机实践报告(代码片段)

1.实践题目二分查找2.问题描述输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。3.核心代码intBinarySearch(inta[],constint&... 查看详情

算法第二章上机实践报告

1.实践题目:7-1二分查找2.问题描述:输入n值(1<=n<=1000)、n个非降序排列的整数以及要查找的数x,使用二分查找算法查找x,输出x所在的下标(0~n-1)及比较次数。若x不存在,输出-1和比较次数。3.算法描述:将n个元素分成个... 查看详情