标签:实验 变量 利用 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