冒泡排序数组,我怎样才能使这个php冒泡排序代码更好或更有效?

时间:2016-05-11 14:38:58

标签: php

如何让这个php冒泡排序代码更好或更有效?

// bubble sort for $AR 
for($i = count($AR)-1 ; $i <= 1; $i--) 
   for($j = 0; $j < $i; $j++) {
      if($AR[$j] > $AR[$j+1]) {
          $t = $AR[$j];
          $AR[$j] = $AR[$j+1];
          $AR[$j+1] = $t;
       } //if
   } //for j 

3 个答案:

答案 0 :(得分:5)

算法是算法,如果你进行一些修改并获得更好的性能,你将不再使用冒泡排序算法,因为它会发生变化。

如果您想要提高性能,则需要更改算法,Quick Sort通常被认为是最佳排序算法。作为php中的实现示例:

// QuickSort Algorithm function
function quickSort(array $array) {
    if (count($array) == 0) {
        return $array;
    }
    $pivot = $array[0];
    $left = $right = array();
    for($i = 1; $i < count($array); $i ++) {
        if ($array[$i] < $pivot) {
            $left[] = $array[$i];
        } else {
            $right[] = $array[$i];
        }
    }
    return array_merge(quickSort($left), array(
            $pivot
    ), quickSort($right));
} 

当然,它总是取决于具体情况,如果你优化它,你会将代码基于该算法,但不能使泡泡算法更好或更有效

检查this post,几乎所有类型的PHP排序都记录在哪里。

希望这能帮到你!

答案 1 :(得分:1)

如果你想提高效率,你可以把

count($AR)-1

在你的for循环中变量,因为它将在每次迭代时完成。嗯,这是一个很小的加速,因为数量是O(1),但它是一些东西..
旁注:如果你在php7示例中循环遍历数组时会有副作用:

$a = [1,2,3,4];  
$b = 1;   
for ($i = 0;$i<count($a);$i++) {  
unset($a[$i]);  
echo $i . "\n";  
}  
var_dump($a);  

输出:

0
1

- :9:
数组(2){
[2] =&gt;
  INT(3)
  [3] =&gt;
  INT(4)
}

注意它是如何进入1

答案 2 :(得分:1)

目前,您的代码根本不会做任何事情。你的第一个循环条件错了。经过纠正后,它看起来就像一个非常精细的冒泡排序。

{{1}}