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