PHP实现冒泡排序算法

php笔记 2019年03月16日

冒泡排序算法实现的逻辑是:从右向左扫描一组元素,当发现相邻的左侧元素比右侧元素大时,交换二者的位置;第一次扫描时,从右侧扫描至第一位,所有元素中最小的元素被交换到第一位;第二次扫描时,从右侧扫描至第二位,第二位开始所有元素中最小的元素被交换到第二位;第三次扫描时,从右侧扫描至第三位,第三位开始所有元素中最小的元素被交换到第三位;以此类推,好比气泡上浮一样最终实现元素有序的过程。

以下是冒泡排序的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

####

以上便是冒泡排序的过程