#include <stdio.h>
int findd(int *p, int a, int b);
int main()
{
int ar[] = {1,2,3,5,7,8,9,7,5,3,2,0};
int x = findd(ar, 0, sizeof(ar)/sizeof(int)-1);
printf("p[%d] = %d\n", x, ar[x]);
return 0;
}
int iss(int *p, int ind)
{
if(p[ind] >= p[ind-1] && p[ind]>=p[ind+1])
return 0;
else if(p[ind] >= p[ind-1] && p[ind]<p[ind+1])
return 1;
else
return -1;
}
int findd(int *p, int a, int b)
{
int x;
if(iss(p,a+1)==0) return a+1;
if(iss(p,b-1)==0) return b-1;
while (1)
{
x = a+1 + ( (b-1 - a -1)>>1);
if(iss(p,x)==1)
a=x;
else if(iss(p,x)==-1)
b=x;
else
return x;
}
}
administrator@ubuntu:~/test$ ./haha
p[6] = 9