上一章的冒泡算法引申一个思考,做了实验
先判断$order
还是先循环好
实验一:
<?php
class
Test {
public function
sortlist($ary,$order='ASC')
{
if
($order=='ASC'){
for
($i = 0; $i < count($ary); $i++) {//执行count次
for
($j = 0; $j < count($ary)-$i-1; $j++) {
if($ary[$j]>$ary[$j+1]){
//前一个数和后一个数比较
$a = $ary[$j];
$ary[$j] = $ary[$j+1];
$ary[$j+1] = $a;
}
}
}
}else{
for
($i = 0; $i < count($ary); $i++) {//执行count次
for
($j = 0; $j < count($ary)-$i-1; $j++) {
if($ary[$j]<$ary[$j+1]){
//前一个数和后一个数比较
$a = $ary[$j];
$ary[$j] = $ary[$j+1];
$ary[$j+1] = $a;
}
}
}
}
return
$ary;
}
}
for
($i=0;$i<1000;$i++){
$ary[] = rand(0,999999);
}
// $ary = array(19432,1,9,5,4,10,45);
$test =
new
Test();
print_r($test->sortlist($ary,'desc'));
?>
实验二:
<?php
class
Test {
public function
sortlist($ary,$order='ASC')
{
for
($i = 0; $i < count($ary); $i++) {//执行count次
for
($j = 0; $j < count($ary)-$i-1; $j++) {
if
($order=='ASC'){
if($ary[$j]>$ary[$j+1]){
//前一个数和后一个数比较
$a = $ary[$j];
$ary[$j] = $ary[$j+1];
$ary[$j+1] = $a;
}
}else{
if($ary[$j]<$ary[$j+1]){
//前一个数和后一个数比较
$a = $ary[$j];
$ary[$j] = $ary[$j+1];
$ary[$j+1] = $a;
}
}
}
}
return
$ary;
}
}
for
($i=0;$i<1000;$i++){
$ary[] = rand(0,999999);
}
// $ary = array(19432,1,9,5,4,10,45);
$test =
new
Test();
print_r($test->sortlist($ary,'desc'));
?>
前期思考觉得是先判断好,因为在循环里面判断程序就要多循环好多次,那么试验下:
6个数值的时间差别不大
100的数值排序也不是那么大,
1000的数值排序有点明显了,
实验一的等待回复时间徘徊在165-180ms之间,实验二的等待回复时间在175-190之间,
结果就显而易见了,先判断好,判断都会拖慢速度了,那么运算就更拖慢了,延伸开来,在循环体里面代码越少越好,能在循环体外做的事情不要留在循环体里面做,不过这些时候可能会加长代码视觉上的长度,
可读性变差。

本文通过两个实验对比分析了冒泡排序算法中条件判断的位置对排序效率的影响,结果显示先进行条件判断可以有效提升排序效率。
5132

被折叠的 条评论
为什么被折叠?



