-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つの場合は機能しません....誰かが同じコードの変更を行うことができます.また、ループの問題が機能しない理由を簡単に説明してください?別のコード。

4

5 に答える 5

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;
            }

        }

    }
于 2013-01-07T05:39:47.007 に答える
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);
?>
于 2013-01-07T05:43:43.213 に答える
0

内側のループは n 回実行する必要はありません (n = 並べ替える要素の数)。外側のループが実行されるたびに、最後にもう 1 つの要素 (昇順) が正しい位置にあります。したがって、内側のループはそれらの要素をチェックすべきではありません。

<?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;
        }
    }

}
?>
于 2013-01-07T05:55:22.143 に答える
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;
        }

    }

} 
于 2013-01-07T05:48:34.100 に答える
0

があるのに、なぜ手動で並べ替えるのsortですか?

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

同様に、なぜ一時変数を使用しているのlistですか?

list($a[$i],$a[$j]) = array($a[$j],$a[$i]);
于 2013-01-07T05:31:49.413 に答える