查找有序表中的第一个指定元素与最后一个指定元素
Input:
10 5
1 2 3 5 5 5 5 5 6 7
Output:
4 8
- 第一个指定元素的下标为4
- 最后一个指定元素的下标为8
话不多说,代码如下(仍然采用折半查找的思想)
#include<stdio.h>
int BinaryFind(int a[],int left,int right,int e){
int mid;
while(left<=right){
mid=(left+right)/2;
if(a[mid]==e){
return mid;
}
else if(a[mid]<e){
right=mid+1;
}
else{
left=mid-1;
}
}
return -1;
}
int FirstBinaryFind(int a[],int left,int right,int e){
int mid;
while(left<right){
mid=(left+right)/2;
if(a[mid]>=e){
right=mid;
}
else{
left=mid+1;
}
}
return left;
}
int LastBinaryFind(int a[],int left,int right,int e){
int mid;
while(left<right){
mid=(left+right)/2;
if(a[mid]>e){
right=mid;
}
else{
left=mid+1;
}
}
return left-1;
}
int main(void){
int a[10]={1,2,3,5,5,5,5,5,6,7};
int ans1=BinaryFind(a,0,9,5);
printf("%d\n",ans1+1);
int ans2=FirstBinaryFind(a,0,9,5);
printf("%d\n",ans2+1);
int ans3=LastBinaryFind(a,0,9,5);
printf("%d\n",ans3+1);
}