-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

为什么你有手动排序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 回答
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
<?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

内部循环不需要执行 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;
        }
    }

}
?>
于 2013-01-07T05:55:22.143 回答