【问题标题】:Bubble sort array, how can I make this php bubble sort code better or more effective?冒泡排序数组,我怎样才能让这个php冒泡排序代码更好或更有效?
【发布时间】:2016-09-07 01:12:38
【问题描述】:

我怎样才能使这个 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 

【问题讨论】:

标签: php


【解决方案1】:

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

如果你想提高性能你需要改变算法,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 中几乎所有类型的排序。

希望对您有所帮助!

【讨论】:

  • 我不同意你的观点,你有不同的排序算法用于不同的情况,作为开发人员,你可以选择正确的算法。您应该优化您的算法以获得可能的最佳结果。
  • @baboizk 是的,当然,这总是取决于具体情况,这就是为什么我说一般,如果你优化它(就像通常那样),你将基于你的代码在那个算法上,但没有让气泡算法更好,正如我所看到的,但你说得有道理。
【解决方案2】:

就目前而言,您的代码根本不会做任何事情。您的第一个循环条件错误。修正后,它看起来就像一个完美的冒泡排序。

// 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】:

    如果你想让这个更高效,你可以把

    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] =>
    整数(3)
    [3] =>
    整数(4)
    }

    注意它是如何只到 1 的

    【讨论】:

      猜你喜欢
      • 2021-07-16
      • 1970-01-01
      • 2021-12-11
      • 2016-02-10
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多