寻找数组中的最大值和最小值(编程之美2.10)
2012-09-27 21:48
423 查看
解法1:扫描两遍数组,分别求出最大的数和最小的数,需要比较2*N次。
函数如下:
解法2:利用变量max和min来存储当前最大值和最小值。然后将数组两两分组(逻辑上),将两个当中的较大者与max比较,如果比max大则更新max,较小者与min比较,如果比min小则更新min。需要比较1.5*N次。
函数如下:
解法三:
分而治之
将数组分成两半,
递归计算前一半的min和max。
递归计算后一半的min和max。
然后比较前一半的min和后一半的min取二者最小值。
然后比较前一半的max和后一半的max取二者最小值。
复杂度分析:
f(2) = 1;
f(n) = 2*f(n/2) + 2; (注:一层需要比较两次)
可以推出f(n) = 1.5*n -2;
可见总的比较次数仍然没有减少。
函数如下:
函数如下:
void find_max_min(int &max,int &min,int n,int *a) { if(n<=0) return; if(n==1) { max=a ; min=a ; return; } max=a[0]; min=a[0]; for(int i=0;i<n;i++) { if(a[i]>max) { max=a[i]; } if(a[i]<min) { min=a[i]; } cout<<i<<" min is"<<min<<" "<<"max is"<<max<<endl; } }
解法2:利用变量max和min来存储当前最大值和最小值。然后将数组两两分组(逻辑上),将两个当中的较大者与max比较,如果比max大则更新max,较小者与min比较,如果比min小则更新min。需要比较1.5*N次。
函数如下:
void find_max_min1(int &max,int &min,int n,int *a) { if(n<=0) return; if(n==1) { max=a ; min=a ; return; } max=a[0]; min=a[1]; for(int i=0;i<n;i+=2) { if(i+1<n&&a[i]<a[i+1]) { if(a[i+1]>max) { max=a[i+1]; } if(a[i]<min) { min=a[i]; } } else if(i+1<n&&a[i]>=a[i+1]) { if(a[i+1]<=min) { min=a[i+1]; } if(a[i]>max) { max=a[i]; } } else if(i+1>=n) { if(a[i]>max) { max=a[i]; } if(a[i]<min) { min=a[i]; } } cout<<i<<" min is"<<min<<" "<<"max is"<<max<<endl; } }
解法三:
分而治之
将数组分成两半,
递归计算前一半的min和max。
递归计算后一半的min和max。
然后比较前一半的min和后一半的min取二者最小值。
然后比较前一半的max和后一半的max取二者最小值。
复杂度分析:
f(2) = 1;
f(n) = 2*f(n/2) + 2; (注:一层需要比较两次)
可以推出f(n) = 1.5*n -2;
可见总的比较次数仍然没有减少。
函数如下:
void find_max_min2(int &max,int &min,int n,int *a) { if(n<=0) return; if(n==1) { max=min=a[0]; return; } if(n==2) { if(a[0]<=a[1]) { max=a[1]; min=a[0]; } else { min=a[1]; max=a[0]; } return; } int max1,max2,min1,min2; find_max_min2(max1,min1,n/2,a); find_max_min2(max2,min2,n-n/2,a+n/2); if(max1<=max2) max=max2; if(min1<=min2) min=min1; }
相关文章推荐
- 编程之美2.10:寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组的最大值和最小值
- 寻找数组中的最大值和最小值(编程之美2.10,包括最大值和次大值)
- 编程之美2.10 寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组中的最大值和最小值
- 编程之美2.10 寻找数组中的最大值和最小值
- 寻找数组中的最小值和最大值——编程之美2.10
- 《编程之美》2.10 寻找数组中的最大值和最小值
- 寻找数组中的最大值和最小值(编程之美2.10,包括最大值和次大值)
- 编程之美2.10寻找数组中的最大值和最小值代码
- 编程之美2.10寻找数组中的最大值和最小值扩展问题Java版
- 编程之美寻找数组中的最大值和最小值以及扩展问题
- 2.10 寻找数组中的最大值和最小值
- 2.10 寻找数组中的最大值和最小值
- 2.10 寻找数组中的最大值和最小值
- 编程之美_2.10_寻找数组中的最大值和最小值
- 编程之美——寻找数组中的最大值和最小值
- 2.10 用最少次数寻找数组中的最大值和最小值[find min max of array]