博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法第二章上机实践报告
阅读量:6256 次
发布时间:2019-06-22

本文共 975 字,大约阅读时间需要 3 分钟。

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和比较次数。

输入样例:

41 2 3 41

出样例:

 0

    2

代码描述

#include<iostream>

using namespace std;
int count=0;
int binarySearch(int a[],int left, int right, int x){
count++;
if(left==right&&a[left]!=x){
return -1;
}
else{
int mid = (left+right)/2;
if(a[mid]==x){
return mid;
}

if(x>mid){

return binarySearch(a,mid+1,right,x);
}
else{
return binarySearch(a,left,mid-1,x);
}
}
}
int a[1005];
int main(){
int x,n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
cin>>x;
int ans;
ans = binarySearch(a,0,n-1,x);
cout<<ans<<endl<<count;
return 0;
}

算法时间空间复杂度分析

因为二分查找每次排除一半的值,最好的情况是排除一次就得到结果,最坏的情况是排除到只剩一个值才得到结果,所以其时间复杂度为log2(n),空间复杂度为O(1)。

心得体会

实践前虽然大概了解二分搜索的思路,但却只是停留在把一组有序数列一次次缩半而已,而这次实践让我对二分搜索的细节了解的更加清晰,如在编写代码过程中,在缩半前要先比较大小,接着还要改下标,本次实践让我将二分搜索的思路写出代码,了解其更多细节,而不仅仅是停留在大概了解上。

转载于:https://www.cnblogs.com/-Kdj/p/9788525.html

你可能感兴趣的文章
Android -- 自定义View小Demo,绘制钟表时间(一)
查看>>
信息检索Reading List
查看>>
自动精简配置&重复数据删除核心技术点及其经济效应探究
查看>>
cncert网络安全周报35期 境内被植入后门的政府网站112个 环比上涨24.4%
查看>>
物联网到底是不是泡沫,且看英特尔交出的答案
查看>>
IPv6太落后了:中国加速服务器援建
查看>>
物理引擎中velocity的单位是个什么鬼?
查看>>
oracle的drop命令
查看>>
设计与梳理企业二级流程的路线方法
查看>>
垃圾回收概念与算法
查看>>
TFS实现需求工作项自动级联保存
查看>>
springmvc 4.x 处理json 数据时中文乱码
查看>>
Python练习(day7)
查看>>
网络工程师笔试题总结
查看>>
飞舞的蝴蝶
查看>>
对Map按key和value分别排序
查看>>
Async Performance: Understanding the Costs of Async and Await
查看>>
POJ2771_Guardian of Decency(二分图/最大独立集=N-最大匹配)
查看>>
Linux中select poll和epoll的区别
查看>>
Cocos2d-x之MenuItem
查看>>