您的位置:首页 > 其它

算法导论 练习题 9.1-1

2017-04-17 16:36 309 查看
#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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: