没事写个冒泡玩玩,冒泡的基本原理(我这从后往前比较):
(1) 依次比较相邻的数,把大的或者小的数丢到后面(我这里按从小到大排序,> 把大的数放后头)。这样一次循环会把最小的数字排序到最左边。
(2)再对剩下的数字进行一次相同的操作,这样把第二小的数字放在第二个位>
置,一次做n-1次循环,就能把数字从小到大排好序。
(3)当如果入参的数组里,数字的一开始就有一定的顺序,比如 1、2、4、3、5、6,排序就只需要把4和3换个顺序,所以可以记录一个标志位,当没有需要更> 换位置时候,就可以退出遍历,这样只进行了11次循环,详见代码。
�排序代码:
function bubbleSort(array $array)
{
if ( ! is_array($array) || count($array) == 0) {
return 'invalid input';
}
$len = count($array);
if ($len == 1) {
return $array;
}
//记录是否已经排好顺序
$isOK = true;
for ($i = 0; ($i < $len - 1) && $isOK; $i++) {
$isOK = false;
for ($j = $len - 2; $j >= $i; $j--) {
if ($array[$j] > $array[$j + 1]) { //判断当前相邻数字大小
//交换顺序
$array[$j + 1] = $array[$j] + $array[$j + 1];
$array[$j] = $array[$j + 1] - $array[$j];
$array[$j + 1] = $array[$j + 1] - $array[$j];
$isOK = true;
}
}
//输出本次排序的结果
echo '第' . ($i + 1) . '次排序结果:' . implode(",", $array) . "\n";
}
return $array;
}
$sort = array(1, 3, 2, 8, 3, 1, 100, 82, 21, 0, -1, 23);
//$sort = array(1, 2, 5, 4, 6, 7, 8);
$res = bubbleSort($sort);
echo "排序结果:" . implode(",", $res) . "\n";
�输出结果: