算法原理

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
  • 思路 :第一个和第二个比,如果条件达成,更换位置 ,然后第二个,和第三个比,达成更换位置 ..和第N个比 以此类推

/*
[BubbleSort 冒泡]
@Author   Jerry
@DateTime 2018-06-06T10:23:44+0800
@Example  eg:
@param    [type]                   $source [array 一维]
@param    string                   $order   [方式, desc 倒序,  其它为升序]
思路 :第一个和第二个比,如果条件达成,更换位置 ,然后第二个,和第三个比,达成更换位置  ..和第N个比   以此类推
 */
function BubbleSort($source, $order = ’desc’)
{
    for ($i = 0; $i < count($source); $i++) {
        for ($j = 0; $j < count($source) - 1; $j++) {
            // echo “>>>>>第{$i}轮第{$j}次”.$source[$j].”和”.$source[$j+1].”进行比较>>>>>>”;
            $condition = $order == ’desc’ ? ($source[$j] < $source[$j + 1]) : ($source[$j] > $source[$j + 1]);
            if ($condition) {
                ##达到条件,调换位置
                $temp           = $source[$j];
                $source[$j]     = $source[$j + 1];
                $source[$j + 1] = $temp;
            }
        }
    }
    return $source;
}

##测试
BubbleSort([1,3,5,6,9,20,10,11,12,14,15,45],'asc');
Array
(
    [0] => 1
    [1] => 3
    [2] => 5
    [3] => 6
    [4] => 9
    [5] => 10
    [6] => 11
    [7] => 12
    [8] => 14
    [9] => 15
    [10] => 20
    [11] => 45
)