算法导论 练习题 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(); }
相关文章推荐
- 算法导论 练习题 3.2-4
- 算法导论 练习题 4.4-6
- 算法导论 练习题 6.3-3
- 《算法导论》练习题--插入排序
- 算法导论 练习题 13.1-5
- 算法导论 9.1-1 求第二小元素
- 算法导论 9.1-1 求第二小元素 (这篇文章写的很好转来学习)
- 算法导论 练习题 2.3-4
- 算法导论 练习题 4.4-7
- 算法导论 练习题 5.1-1
- 算法导论 练习题 5.2-2
- 算法导论 练习题 5.2-4
- 算法导论 练习题 13.1-6
- 算法导论 练习题 14.3-3
- 算法导论 练习题 15.1-3
- 算法导论之2.3-7练习题
- 算法导论 练习题 3.2-5
- 算法导论 练习题 4.4-8
- 算法导论 练习题 5.2-5
- 算法导论 练习题 8.1-1