如何让这个php冒泡排序代码更好或更有效?
// bubble sort for $AR
for($i = count($AR)-1 ; $i <= 1; $i--)
for($j = 0; $j < $i; $j++) {
if($AR[$j] > $AR[$j+1]) {
$t = $AR[$j];
$AR[$j] = $AR[$j+1];
$AR[$j+1] = $t;
} //if
} //for j
答案 0 :(得分:5)
算法是算法,如果你进行一些修改并获得更好的性能,你将不再使用冒泡排序算法,因为它会发生变化。
如果您想要提高性能,则需要更改算法,Quick Sort通常被认为是最佳排序算法。作为php中的实现示例:
// QuickSort Algorithm function
function quickSort(array $array) {
if (count($array) == 0) {
return $array;
}
$pivot = $array[0];
$left = $right = array();
for($i = 1; $i < count($array); $i ++) {
if ($array[$i] < $pivot) {
$left[] = $array[$i];
} else {
$right[] = $array[$i];
}
}
return array_merge(quickSort($left), array(
$pivot
), quickSort($right));
}
当然,它总是取决于具体情况,如果你优化它,你会将代码基于该算法,但不能使泡泡算法更好或更有效。
检查this post,几乎所有类型的PHP排序都记录在哪里。
希望这能帮到你!
答案 1 :(得分:1)
如果你想提高效率,你可以把
count($AR)-1
在你的for循环中变量,因为它将在每次迭代时完成。嗯,这是一个很小的加速,因为数量是O(1),但它是一些东西..
旁注:如果你在php7示例中循环遍历数组时会有副作用:
$a = [1,2,3,4];
$b = 1;
for ($i = 0;$i<count($a);$i++) {
unset($a[$i]);
echo $i . "\n";
}
var_dump($a);
输出:
0
1
- :9:
数组(2){
[2] =&gt;
INT(3)
[3] =&gt;
INT(4)
}
注意它是如何进入1
的答案 2 :(得分:1)
目前,您的代码根本不会做任何事情。你的第一个循环条件错了。经过纠正后,它看起来就像一个非常精细的冒泡排序。
{{1}}