同时获取数组中的最大值和最小值
2011-05-03 12:51
288 查看
找到一个数组中最大值一般用如下方法,首先拿出数组中第一个值作为当前的最大值,然后依次和后面所有的值比较,发现有比当前最大值还大的就更新最大值的记录:
同理,最小值也是这么判断:
无论是求最大值还是最小值都进行了n-1次比较,那么同时求最大值是否需要判断2n-2次呢?
算法导论第九章给出了一个结论,最多只需要比较3+n-2次比较就可以完成,因为我们可以从数组中一次取两个数据,先将这两个数据进行比较,然后把其中大的与最大值记录比较,小的与最小值记录比较即可,因为取出的两个数据中的小的值不可能还会成为最大值。
int maximum(int *arr, int size) { int i; int max = arr[0]; for (i = 1; i < size; i++) { if (max < arr[i]) max = arr[i]; } return max; }
同理,最小值也是这么判断:
int minimum(int *arr, int size) { int i; int min = arr[0]; for (i = 1; i < size; i++) { if (min > arr[i]) min = arr[i]; } return min; }
无论是求最大值还是最小值都进行了n-1次比较,那么同时求最大值是否需要判断2n-2次呢?
算法导论第九章给出了一个结论,最多只需要比较3+n-2次比较就可以完成,因为我们可以从数组中一次取两个数据,先将这两个数据进行比较,然后把其中大的与最大值记录比较,小的与最小值记录比较即可,因为取出的两个数据中的小的值不可能还会成为最大值。
void getRange(int *arr, int size, int *max, int *min) { int *p = arr, *endp = arr + size; if (size % 2 != 0) { *max = *min = *p++; } else { if (*p > *(p + 1)) { *max = *p; *min = *(p + 1); } else { *max = *(p + 1); *min = *p; } p += 2; } while (p != endp) { if (*p > *(p + 1)) { if (*p > *max) *max = *p; if (*(p + 1) < *min) *min = *(p + 1); } else { if (*(p + 1) > *max) *max = *(p + 1); if (*(p) < *min) *min = *p; } p += 2; } }
相关文章推荐
- JavaScript获取数组最小值和最大值的方法
- Java常识求阶层!的和 ,获取某个数组中的最小值,定义数组,获得成绩之和,平均成绩,最小成绩,最大成绩。等问题大全
- 获取数组最大值和最小值的简便方法
- JavaScript获取数组最大值和最小值
- 从数组中获取最大或最小值的解释
- 同时找数组里的最大最小数——分治思想
- Js获取数组中的最大值和最小值
- 获取数组中最大值的方法(最小值同理)
- 数组获取最大值和最小值
- Javascript中获取数组最大值和最小值的方法
- 在N个不同元素的数组A中,同时找到它的最大元素和最小元素,设A中的元素可以直接比较大小
- 同时寻找一个数组中的最大元素和最小元素--你会有所收获
- 同时找出数组的最大值和最小值
- 算法8:一个整数数组里怎么同时找最大和最小的数,尽量优化比较次数
- js同时寻找数组中最大值和最小值,编程之美解法三
- Javascript获取数组中的最大值和最小值的方法汇总
- 获取一个数组的最大值与最小值 数组的合并
- 获取数组中最大值和最小值(使用apply或扩展语句 spred operator)
- JavaScript获取数组中最大(最小)值
- 获取数组最大值跟最小值