冒泡排序算法实现的逻辑是:从右向左扫描一组元素,当发现相邻的左侧元素比右侧元素大时,交换二者的位置;第一次扫描时,从右侧扫描至第一位,所有元素中最小的元素被交换到第一位;第二次扫描时,从右侧扫描至第二位,第二位开始所有元素中最小的元素被交换到第二位;第三次扫描时,从右侧扫描至第三位,第三位开始所有元素中最小的元素被交换到第三位;以此类推,好比气泡上浮一样最终实现元素有序的过程。
以下是冒泡排序的php实现代码
<?php
$array = [9,3,1,5,2,8,7,6,4];
function bubble_sort($array)
{
$count = count($array);
for ($i = 0;$i < $count;$i++){
for ($j = $count-1;$j > $i;$j--){
if ($array[$j-1] > $array[$j] ){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
$array = bubble_sort($array);
print_r($array);
执行结果
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
为了便于理解冒泡排序的实现过程,下面的代码对每次冒泡进行打印
<?php
$array = [9,3,1,5,2,8,7,6,4];
function bubble_sort($array)
{
$count = count($array);
for ($i = 0;$i < $count;$i++){
echo "####\n";
for ($j = $count-1;$j > $i;$j--){
if ($array[$j-1] > $array[$j] ){
echo "{$array[$j]}和{$array[$j-1]}交换\n";
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
echo "结果:".implode(",",$array)."\r\n\r\n";
}
}
}
return $array;
}
$array = bubble_sort($array);
查看打印结果
####
4和6交换
结果:9,3,1,5,2,8,7,4,6
4和7交换
结果:9,3,1,5,2,8,4,7,6
4和8交换
结果:9,3,1,5,2,4,8,7,6
2和5交换
结果:9,3,1,2,5,4,8,7,6
1和3交换
结果:9,1,3,2,5,4,8,7,6
1和9交换
结果:1,9,3,2,5,4,8,7,6
####
6和7交换
结果:1,9,3,2,5,4,8,6,7
6和8交换
结果:1,9,3,2,5,4,6,8,7
4和5交换
结果:1,9,3,2,4,5,6,8,7
2和3交换
结果:1,9,2,3,4,5,6,8,7
2和9交换
结果:1,2,9,3,4,5,6,8,7
####
7和8交换
结果:1,2,9,3,4,5,6,7,8
3和9交换
结果:1,2,3,9,4,5,6,7,8
####
4和9交换
结果:1,2,3,4,9,5,6,7,8
####
5和9交换
结果:1,2,3,4,5,9,6,7,8
####
6和9交换
结果:1,2,3,4,5,6,9,7,8
####
7和9交换
结果:1,2,3,4,5,6,7,9,8
####
8和9交换
结果:1,2,3,4,5,6,7,8,9
####
以上便是冒泡排序的过程