求数组中最大值和最小值 以及 求数组中最大值和次大值 最小比较次数
2012-06-20 17:28
288 查看
#include<stdio.h> int count1=0; int count2=0; void find_max_min(int* a,int n,int* max,int* min);//1.5n-2 compare void find_max1_max2(int* a,int n,int* max1,int* max2);//n+logn+1 compare int main() { int a[8]={4,2,3,1,5,4,6,8}; int max1,max2,min; find_max_min(a,8,&max1,&min); printf("max=%4d,min=%4d\n",max1,min); printf("%2d\n",count1); find_max1_max2(a,8,&max1,&max2); printf("max1=%4d,max2=%4d\n",max1,max2); printf("%2d\n",count2); return 0; } void find_max_min(int* a,int n,int* max,int* min)//1.5n-2 compare { if(n<=0 || a==NULL) return; if(n==1) { *max=*min=a[0]; return; } if(n==2) { if(a[0]<a[1]) { *max=a[1]; *min=a[0]; count1++; } else { *max=a[0]; *min=a[1]; count1++; } return; } else { int max1,max2,min1,min2; find_max_min(a,n/2,&max1,&min1); find_max_min(a+n/2,n-n/2,&max2,&min2); if(max1<=max2) { count1++; *max=max2; } else { *max=max1; count1++; } if(min1<=min2) { *min=min1; count1++; } else { *min=min2; count1++; } return; } } void find_max1_max2(int* a,int n,int* max1,int* max2)//n+logn compare { if(n<=0 || a==NULL) return; if(n==1) { *max1=*max2=a[0]; return; } if(n==2) { if(a[0]<a[1]) { *max1=a[1]; *max2=a[0]; count2++; } else { *max1=a[0]; *max2=a[1]; count2++; } return; } else { int max1_temp1,max2_temp1; int max1_temp2,max2_temp2; find_max1_max2(a,n/2,&max1_temp1,&max2_temp1); find_max1_max2(a+n/2,n-n/2,&max1_temp2,&max2_temp2); if(max1_temp1<=max1_temp2) { *max1=max1_temp2; count2++; if(max1_temp1<=max2_temp1) { *max2=max2_temp1; count2++; } else { *max2=max1_temp1; count2++; } if(*max2<max2_temp2) { *max2=max2_temp2; count2++; } } else { *max1=max1_temp1; count2++; if(max1_temp2<=max2_temp1) { *max2=max2_temp1; count2++; } else { *max2=max1_temp2; count2++; } if(*max2<max2_temp2) { *max2=max2_temp2; count2++; } } return; } }
相关文章推荐
- [BUC-2.10]利用分治的思想求无序数组中的最大值和最小值以及求第二大的值(分治的思想可以使得比较的次数1.5N-2)
- 关于在一个无序数组中的数求最大值和最小值的最小比较次数
- 同时寻找最大数和最小数的最优算法以及寻找最大的两个数所需的最少比较次数
- 算法8:一个整数数组里怎么同时找最大和最小的数,尽量优化比较次数
- 求一个数组中的最大值和最小值,要求将比较次数减小至3N/2
- 同时寻找最大数和最小数的最优算法以及寻找最大的两个数所需的最少比较次数
- 试着用最小的比较次数去寻找数组中的最大值和最小值。
- 数组中的最大值以及最小值的位置变换的问题(C++)
- 数组中的最大值以及最小值的位置变换的问题(C++)
- 寻找矩阵中最大元素置中,最小四元素置边角 P279_1010 改进比较次数
- 随机产生20个[10 , 50]的正整数存到数组中,并求数组中的所有元素最大值、最小值、平均值以及各元素之和,及第二大值。
- 在N个不同元素的数组A中,同时找到它的最大元素和最小元素,设A中的元素可以直接比较大小
- 如何在比较1.5 len的次数下,找到整型数组最大最小值
- 在规定次数内找出数组中最大值和最小值
- 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。
- 求数组中的所有元素最大值、最小值、平均值以及各元素之和,及第二大值。
- 最大最小值:给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。
- 编程之美3:寻找数组中的最大值和最小值以及最大值和次大值
- [面试题]用最少的比较次数找出一个数组中的最大值和次大值
- javascript 返回数组中 最大 最小 平均值多种方法分析比较 by FungLeo