定义:
冒泡排序,顾名思义就是整个过程就像气泡一样往上升,单向冒泡排序的基本思想是(假设由小到大排序)
算法原理:
①比较相邻的元素,如果第一个比第二个大,那么就交换这两个元素。
②对每一对相邻的元素做同样的操作,从第一对开始到最后一对结束,那么最后的元素应该会是最大的数。
③除了最后一个元素外,针对其他的元素重复以上的步骤。
④对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较为止。
以数组array(36,25,48,12,25,65,43,57)为例,具体排序过程如下:
初始状态:[36 25 48 12 25 65 43 57 ]
一趟排序:[25 36 12 25 48 43 57] 65
两趟排序:[25 12 25 36 43 48] 57 65
三趟排序:[12 25 25 36 43] 48 57 65
四趟排序:[12 25 25 36] 43 48 57 65
五趟排序:[12 25 25] 36 43 48 57 65
六趟排序:[12 25] 25 36 43 48 57 65
七趟排序:[12] 25 25 36 43 48 57 65
代码如下:
function maopao($arr) {
$len = count($arr);//计算数组长度
for ($i =1; $i < $len; $i++) {//$i为1的原因是$len最小为1
for ($k = 0; $k < $len - $i; $k++) {//$k为0的原因是数组的key从0开始的
if ($arr[$k] > $arr[$k+1]) {
$temp = $arr[$k];
$arr[$k] = $arr[$k + 1];
$arr[$k+1] = $temp;
}
}
}
return $arr;
}
$arr = array(36,25,48,12,25,65,43,57);
echo "排序前";
foreach ($arr as $k => $v ) {
echo $v . " ";
}
echo PHP_EOL;
echo "排序后";
$arr = maopao($arr);
foreach ($arr as $k => $v ) {
echo $v . " ";
}
程序执行结果如下:
排序前36 25 48 12 25 65 43 57
排序后12 25 25 36 43 48 57 65