题目:设a[0:n-1]是已经排好序的数组。请修改二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i,和大于x最小元素的位置j。当搜索元素在数组中时,i和j是相同的,均为x在数组中所在的位置。
c语言实现如下:
#include<stdio.h>
int *find_location(int *a,int left,int right,int x);
int mian(){
int a[10]={11,22,33,44,55,66,77,88,99,111};
int *result=find_location(a,0,9,44);
if(result[0]==result[1])
{
printf("查找的元素为第%d号元素\n");
} else{
printf("查找的元素位于数组的第%d号元素和第%d号元素之间\n",result[0],result[1]);
}
return 0;
}
int *find_location(int *a,int left,int right,int x){
int center=(left+right)/2;
int result[2];
if((right-left)<=1){
result[0]=left+1;
result[1]=right+1;
return result;
}
if(a[center]==x){
result[0]=result[1]=center+1;
}else{
if(x<a[center]){
return find_location(a,left,center,x);
}else{
return find_location(a,center,right,x);
}
}
return result;
}