首页 > 编程语言 > 详细

算法第二章上机实践报告

时间:2019-09-23 21:54:21      阅读:94      评论:0      收藏:0      [点我收藏+]

一、问题

技术分享图片

 

二、思路分析

对二分查找的改进,假设二分查找最后结果(mid)比需要查找的要大,则(mid)为大于所需查找数,且(mid-1)小于所需查找数

假设二分查找最后结果(mid)比需要查找的要小,则(mid)为小于所需查找数,且(mid+1)大于于所需查找数

 

三、算法分析

#include <iostream>
using namespace std;

int main (){
int n , x , a[1000] , low = 0 , mid , high;
cin >> n;
cin >> x;
high = n-1 ;
for (int i = 0; i < n ; i++){
cin >> a[i];
}
if (a[0] > x){
cout << -1 << " " << 0;
return 0;
}
else if (a[n-1] < x){
cout << n-1 << " " << n;
return 0;
}
while (low <= high){//二分查找的结束判断
mid = (low + high)/2;
if (a[mid] > x){
high = mid - 1;
}
else if (a[mid] == x){
cout << mid << " " << mid ;//若相等则直接结束函数
return 0;
}
else low = mid + 1;
}
if (a[mid] > x){
cout << mid - 1 << " " << mid;//判断最终查找数(mid)是否大于或小于所查找数
}
else cout << mid << " " << mid + 1;
return 0;
}
 
四、算法时间及空间复杂度分析
时间复杂度为O(logn)空间复杂度为O(1)
 
五、心得体会
结伴程序可以更好的了解别人代码的优点,拥有更快的思路。实验也让我进一步加深对算法的理解。

技术分享图片

 

算法第二章上机实践报告

原文:https://www.cnblogs.com/xiaozhao-/p/11574830.html

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