#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void printA(int a[],int len)
{
for(int i=1;i<=len;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
int min(int a,int b)
{
return a<=b?a:b;
}
int search(int a[],int len)
{
if(len==1)
return a[1];
else if(len==2)
return min(a[1],a[2]);
int l=2*len-1;
int *b=(int*)malloc((l+1)*sizeof(int));
b[0]=INT_MIN;
for(int i=len;i<=l;i++)
{
b[i]=a[i-len+1];
}
for(int i=len-1;i>=1;i--)
{
b[i]=min(b[2*i],b[2*i+1]);
}
printA(b,l);
int min1=b[1];
int min2=INT_MAX;
for(int i=1;2*i<=l && 2*i+1<=l;)
{
int j=i;
if(2*i<=l)
{
if(b[2*i] != min1 && b[2*i]<min2)
{
min2=b[2*i];
}
else if(b[2*i] == min1)
{
j=2*i;
}
}
if(2*i+1<=l)
{
if(b[2*i+1] != min1 && b[2*i+1]<min2)
{
min2=b[2*i+1];
j=2*i+1;
}
else if(b[2*i+1] == min1)
{
j=2*i+1;
}
}
i=j;
}
free(b);
return min2;
}
int main()
{
int a[6]={INT_MIN,66,1,44,33,5};
int m=search(a,5);
printf("%d ",m);
getchar();
}
算法导论 练习题 9.1-1
最新推荐文章于 2019-07-26 18:29:06 发布