算法第二章上机实践报告

一.实验题目

7-1 二分查找 (20 分)

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

输入格式:

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

输出格式:

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

代码实现:
#include <iostream>
using namespace std;
int count =0;
int search(int b[],int c,int left,int right){
    
    
    
  
    while(left<=right){
     int mid = (left+right)/2;
     if(c<b[mid]){
      count++;
   right =mid-1;
  }
  else if(c>b[mid]){
   count++;
   left = mid+1;
   
  }
  else {
  count++;
  return mid;
  }
  
 }
 return -1;
}
  
int main(){
 int a;
 cin>>a;
 int b[a];
 
 for(int i=0;i<a;i++){
  cin>>b[i];
 }
 
 int c;
 cin>>c;
 int left =0;
 int right = a-1;
 
    int d=search(b,c,left,right);
 cout<<d<<endl;
 cout<<count<<endl;
}
   

总结反思:在本次上机实践中,我们本想用迭代思路通过不断调用函数得出答案,最后测试时发现出现超时错误。而我们也没有找到问题的解决方案,错失了大量时间。最后采用递归方法,首先判断语句,在循环中分解数组,直到找到所需数字并返回,得到正确答案。这次题目并不难,但我们开始选择了我们并不擅长的方法,影响了编程效率,使我们意识到自己对基础知识的掌握还需大量练习和巩固。时间复杂度o (logn),空间复杂度o(1)

posted @ 2018-10-20 15:40  陳泽博Czmichael  阅读(259)  评论(0编辑  收藏  举报