循环体内判断是否拖慢速度

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

上一章的冒泡算法引申一个思考,做了实验

先判断$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之间,
结果就显而易见了,先判断好,判断都会拖慢速度了,那么运算就更拖慢了,延伸开来,在循环体里面代码越少越好,能在循环体外做的事情不要留在循环体里面做,不过这些时候可能会加长代码视觉上的长度,
可读性变差。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值