本文共 787 字,大约阅读时间需要 2 分钟。
$arr[$i + 1]) { $bigger = $arr[$i]; $smaller = $arr[$i + 1]; } else { $bigger = $arr[$i + 1]; $smaller = $arr[$i]; } $cmpTime++; if ($bigger > $biggest) { $biggest = $bigger; } $cmpTime++; if ($smaller < $smallest) { $smallest = $smaller; } } echo "ArrLeng: " . $count . " "; echo "CmpTime: " . $cmpTime . " "; echo "Big: " . $biggest . " "; echo "Small: " . $smallest . " ";}$arr = array(4, 6, 8, 1, 5, 4, 3, 9, 11, 3, 22, 100, 55, 0, 4, -1, 31, 210, -10);maxMin($arr);?>这段代码展示了一个用于查找数组最大值和最小值的函数。传统的线性扫描方法可能需要2n次比较,而该方法通过优化比较次数,将复杂度降低到1.5n次。
以下是改进后方法的详细解释:
初始化:函数首先初始化$biggest和$smallest为数组最后一个元素,假设数组至少包含一个元素。
双重循环比较:从数组第一个元素开始,每次取出两个相邻元素进行比较:
$bigger和$smaller。$bigger和$smaller分别取较大的和较小的。更新最大最小值:在每次比较后,更新当前找到的最大值和最小值。
这种方法通过同时跟踪最大和最小值,减少了比较次数,使算法更加稳定且效率更高。
转载地址:http://tttfk.baihongyu.com/