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