求一个数组中的最大值和最小值的算法改进 php 实现
设计一个最优算法来查找一n个元素数组中的最大和最小。已知一种需要比较2n次的方法,请给一个更优的算法。情特别注意优化时间复杂度的常数。 主要思想:把数组两两一对分组,如果数组元素个数为奇数,就最后单独分一个,然后分别对每一组的两个数比较,把小
设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。情特别注意优化时间复杂度的常数。
主要思想:把数组两两一对分组,如果数组元素个数为奇数,就最后单独分一个,然后分别对每一组的两个数比较,把小的放在左边,大的放在右边,这样遍历下来,总共比较的次数是 N/2 次;在前面分组的基础上,那么可以得到结论,最小值一定在每一组的左边部分找,最大值一定在数组的右边部分找,最大值和最小值的查找分别需要比较N/2 次和N/2 次;这样就可以找到最大值和最小值了,比较的次数为
N/2 * 3 = (3N)/2 次
//算法实现
$data = array(1,2,3,2,6,5,8,5,7,9,3,2,1,59,45,34,60,10,90);
$length =count($data);
for($i=0 ; $i
if( isset($data[$i+1]) && $data[$i] > $data[$i+1]){
$temp_data = $data[$i];
$data[$i] = $data[$i+1];
$data[$i+1] = $temp_data;
}
}
$min_data = $data[0];
$max_data = $data[1];
for($i=2;$i
if($min_data > $data[$i]) $min_data = $data[$i];
}
for($i=3;$i
if($max_data
}
if($length%2!=0 && $max_data
echo $min_data,"\r\n" ,$max_data;
?>
推荐阅读
-
求一个数组中的最大值和最小值的算法改进 php 实现
-
汇编语言(七)之求无符号字节序列中的最大值和最小值(子程序实现)
-
Jsの数组练习-求一组数中的最大值和最小值,以及所在位置
-
设计一个算法:用不多于3n/2的平均比较次数,在数组A[1,...,n]中找出最大值和最小值的元素
-
设计一个最优算法来查找一n个元素数组中的最大值和最小值
-
linux shell实现求一个多维数组中的最大和最小值
-
PHP-算法[给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标]
-
Java求一个数组中的最大值和最小值
-
php实现用三元运算符求三个数中的最大值,最小值
-
5.1 编写程序 从键盘上输入5个整数,并存放到一个数组中,然后计算所有元素的和,最大值、最小值以及 平均值