算法原理:
1.比較相鄰的元素,如果第一個比第二個大,那麼就交換這兩個元素。
2.對每一對相鄰元素做同樣的工作,從第一對開始到最後一對結束,最後的元素應該會是最大的數。
3.除了最後一個元素外,針對其他的元素重複以上步驟。
4.對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較爲止。
實現代碼:
<?php
header("Content-type:text/html;charset=utf-8");
// 性能最差的冒泡排序方法
function maopao1($arr) {
$len = count($arr); //計算數字長度
for ($i = 1; $i < $len; $i++) {
// 該層循環控制需要冒泡的輪數
for ($k = 0; $k < $len -$i; $k++) {
if ($arr[$k] > $arr[$k+1]) {
$tmp = $arr[$k];
$arr[$k] = $arr[$k+1];
$arr[$k+1] = $tmp;
}
}
}
return $arr;
}
// 性能最好的冒泡排序方法
function maopao2($arr) {
// 設置變量的初始值
$low = 0;
$high = count($arr) -1;
while ($low < $high) {
// 正向冒泡,找到最大值
for ($j = $low; $j < $high; ++$j) {
if ($arr[$j] > $arr[$j+1]) {
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
--$high;
// 放向冒泡,找到最小值
for ($j = $high; $j > $low; --$j) {
if ($arr[$j] < $arr[$j-1]) {
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
++$low;
}
return $arr;
}
$arr = array(121,656,8997,11,56456,778,65454,314354,1121);
echo "排序前:";
foreach ($arr as $k => $val) {
echo $val.' ';
}
echo "<br>方法一排序後:";
$arr = maopao1($arr);
foreach ($arr as $k => $val) {
echo $val.' ';
}
echo "<br>方法二排序後:";
$arr = maopao2($arr);
foreach ($arr as $k => $val) {
echo $val.' ';
}
?>