这个数组排序有什么问题

时间:2013-01-07 05:29:31

标签: php html arrays sorting

这是我的代码:

    <?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它不工作....有人可以修改相同的代码,还请简要解释为什么它没有解决循环问题?我不是在寻找不同的代码。

5 个答案:

答案 0 :(得分: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;
            }

        }

    }

答案 1 :(得分:0)

为什么在sort时手动排序?

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

同样,当你有list时,为什么要使用临时变量?

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

答案 2 :(得分: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);
?>

答案 3 :(得分: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;
        }

    }

} 

答案 4 :(得分: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;
        }
    }

}
?>