码迷,mamicode.com
首页 > 编程语言 > 详细

算法第二章上机实验报告

时间:2018-10-20 11:51:03      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:实验   变量   利用   name   ret   stream   while   str   数组   

问题描述:在排好序的数组,依照二分搜索算法的思想,寻找x。当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j;当搜索元素在数组中时,i和j相同,均为x在数组中的位置。输出小于x的最大元素的最大下标i和大于x的最小元素的最小下标j。当搜索元素在数组中时,i和j相同。 提示:若x小于全部数值,则输出:-1 0 若x大于全部数值,则输出:n-1的值 n的值。

问题理解:该问题主要考查对二分搜索算法的运用,在二分搜索算法的基础上添加了一些对特殊情况的考虑。

代码实现:

#include <iostream>
using namespace std;
int i;
int j;
void BinarySearch(int nums[],int n,int x )
{
int left=0;int right = n-1;
int middle = 0;
while(left <= right){
middle = (left + right)/2;
if(x == nums[middle])
{
i = j = middle;
return;
}
if(x > nums[middle]) left = middle +1;
else right = middle -1;
}
i= left-1,j=left;
if(left>right) i=right,j=right+1;
if(right<0) i=-1,j=0;
}

int main()
{
int n,x,k;
cin>>n>>x;
int array[1000];
for(int k=0;k<n;k++)
{
cin>>array[k];
}
BinarySearch(array,n,x);
cout<<i<<" "<<j;
return 0;
}

算法描述:该题主要运用了二分搜索算法来查找x,再根据查找的结果进行讨论,时间复杂度为O(logn),空间复杂度为0(1)。

反思:对于全局变量的意识不够,不能及时巧妙地利用全局变量。做题时读题不够细致,有时会误解题意。

算法第二章上机实验报告

标签:实验   变量   利用   name   ret   stream   while   str   数组   

原文地址:https://www.cnblogs.com/halo1234/p/9820954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!