2013-01-07 47 views
-2

這裏是我的代碼:哪些錯誤與此數組排序

<?php 
    $a=array(10,8,6,5); 
    $b=count($a); 
    for($i=0;$i<($b-1);$i++) 
    { 
     for($j=1;$j<($b);$j++) 
     { 
      if($a[$j]<$a[$i]) 
      { 
      $temp = $a[$j]; 
      $a[$j]=$a[$i]; 
      $a[$i]=$temp; 
      } 

     } 

    } 

我只是想知道什麼是錯在上面的代碼?因爲如果我拿3個數組值,它工作正常,但對於4它不工作....可以有人做相同的代碼的修改,也請簡單解釋爲什麼它不工作循環的任何問題?我不尋找不同的代碼。

回答

3

您錯誤地修改了氣泡排序算法。使用標準的。

<?php 
    $a=array(10,8,6,5); 
    $b=count($a); 
    for($i=0;$i<($b);$i++) //Changes over here 
    { 

     for($j=0;$j<($b);$j++) //Changes over here 
     { 
      if($a[$j]>$a[$i]) //Changes over here 
      { 
      $temp = $a[$j]; 
      $a[$j]=$a[$i]; 
      $a[$i]=$temp; 
      } 

     } 

    } 
+0

偉大..這正是我正在尋找..謝謝 – Friend

+0

歡迎..... :) – codeomnitrix

0

爲什麼在sort時手動排序?

$a = array(10,8,6,5); 
sort($a); 
var_dump($a); 

同樣,爲什麼當你有list時使用臨時變量?

list($a[$i],$a[$j]) = array($a[$j],$a[$i]); 
+0

感謝您的回覆kolink,雅我知道有buidin功能,但我仍然在尋找一個程序,因爲我已經提到我不需要新的代碼,我想修改上面的代碼本身... bcos我想知道確切的邏輯:( – Friend

0

嘗試下面的代碼可能會有所幫助。

<?php 

function pr($array = array()) 
{ 
    echo "<pre>"; 
     print_r($array); 
    echo "</pre>"; 
} 
    $a = array(10,8,6,5); 
    $b = count($a); 
    for($i=0;$i <= ($b-1);$i++) 
    { 
     for($j=0; $j < ($b);$j++) 
     { 
      if($a[$j] < $a[$i]) 
      { 
       $temp = $a[$j]; 
       $a[$j]=$a[$i]; 
       $a[$i]=$temp; 
      } 
     } 
    } 
    pr($temp); 

    pr($a); 
?>
0
<?php 
$a=array(8,6,5); 
$b=count($a); 
for($i=0;$i<($b);$i++) 
{ 

    for($j=0;$j<($b);$j++) 
    { 
     if($a[$j]<$a[$i]) 
     { 
     $temp = $a[$j]; 
     $a[$j]=$a[$i]; 
     $a[$i]=$temp; 
     } 

    } 

} 
+3

答案不應該只包含代碼。描述你的改變並解釋它們。 – Zeta

0

內環並不需要被執行n次(其中,要排序N =元素的數量)。每次執行外部循環時,最後一個元素(升序)處於正確的位置。所以,內部循環不應該檢查這些元素。

<?php 
$a=array(10,8,6,5); 
$b=count($a); 
for($i=0;$i<($b);$i++){ 
    for($j=0;$j<($b-$i);$j++){ // this change will save time 
     if($a[$j]>$a[$i]){ 
       $temp = $a[$j]; 
       $a[$j]=$a[$i]; 
       $a[$i]=$temp; 
     } 
    } 

} 
?>