有一数组a[0..n-1],数组中的元素已排好序,设存在一元素a[m]=m,设计一算法,求得m,且时间复杂度为O(logN).
#include<stdio.h>
int find(int a[],int n)
{
int low=0,high=n-1,m;
while(low<=high)
{
m=(low+high)/2;
if(a[m]==m)
return m;
else if(a[m]>m)
high--;
else
low++;
}
return -1;
}
void main()
{
int a[5]={1,2,2,4,5};
printf("%d",find(a,5));
}