#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
本文介绍了一个C语言程序,该程序能够在一个整数数组中找到峰值元素的位置。峰值元素是指大于其相邻元素的数组成员。通过递归二分查找的方法实现,提高了搜索效率。
1583

被折叠的 条评论
为什么被折叠?



