關於冒泡排序

1. [代碼]南湖船老大版PHP冒泡     

<?<?php
$array = array(7,1,2,8,4,5,6,0,22,9);
$len=count($array);
for ($i=0;$i<$len;$i++) {
  for ($j=$len-1;$j>$i;$j--) {
    if ($array[$j-1] > $array[$j]) {
      $tmp=$array[$j];
      $array[$j]=$array[$j-1];
      $array[$j-1]=$tmp;
    }
  }
}

2. [代碼]eechen版PHP冒泡代碼     

<?php
//eechen版代碼
$array = array(0,1,2,3,4,5,6,7,8,9);
for ($i=0;$i<count($array);$i++) {
  for ($j=0;$j<count($array)-1;$j++) {
    if ($array[$j] < $array[$j+1]) {
      $temp = $array[$j];
      $array[$j] = $array[$j+1];
      $array[$j+1] = $temp;
    }
  }
}

細心看這兩個版本就會發現南湖船老大的冒泡效率會更高,總的循環次數爲45次。php

而eechen的則須要循環90次是船老大的一倍。spa

雖然只是一個小小的冒泡可是不一樣的寫法這差距就大了去了。code

評論區有大牛給的一個更優版io

function pop($stack) {
    $l = count($stack);
    for ($m = 1; $m < $l; $m++) {
        $pin = false;    
        for ($n = $l - 1; $n >= $m; $n--) {
            if ($stack[$n] < $stack[$n - 1]) {
                $temp = $stack[$n];
                $stack[$n] = $stack[$n - 1];
                $stack[$n - 1] = $temp;
                $pin = true;
            }
        }
        if (!$pin) {
            return $stack;
        }
    }
}

$stack = [5, 48, 1, 4, 2, 8, 6, 8, 6];
$res = pop($stack);
print_r($res);

 若是原始數據是有序的(沒有執行交換)則只須要返回原始數據便可,避免了無用的循環與比較。function

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息