改写二分算法
改写二分算法
题目描述:
设a[0:n-1]是已排好序的数组,请改写二分搜索算法,使得当x不在数组中时,返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
二分算法基本思想:
将n个元素分成个数大致相同的来两半,取中间值 a【n/2】与要找的数 x 进行比较。
如果数组的中间值就是x,算法终止;
如果数组的中间值大于x,则只要在数组a的左半部分继续搜索x;
如果数组的中间值小于x,则只要在数组a的右半部分继续搜索x。
代码如下:
#include
using namespace std;
void s(int a[],int n,int x,int left,int right)
{
int mid;
while(left<=right)
{
mid=(left+right)/2;
if(x==a[mid])
{
cout<a[mid]) left=mid+1;//要找的x大于中间值
if(xa[n-1]) cout<a[0])) cout<a[mid])&&(x>n;
cin>>x;
a=new int [n];
for(int i=0;i>a[i];
}
s(a,n,x,0,n-1);
return 0;
}
实例运行结果截图:
实例1
实例2
实例3