冒泡排序PHP实现
冒泡排序容易给人留下印象,因为这个算法的名字“冒泡”非常生动形象。这个名字由来是因为较小的元素会经由交换慢慢“浮”到数列的顶端,就像水中的气泡一样。
冒泡排序算法的原理如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
下面借助一个动画来直观地演示这个冒泡的过程:
冒泡排序过程演示
冒泡排序的PHP代码为:
- <?php
- function bubble_sort($arr){
- $len = count($arr);
- while($len > 0){
- for($i = 0; $i < $len-1; $i++){
- // $i 与 $i+1 每次为一对相邻元素,比较后交换
- if($arr[$i] > $arr[$i+1]){
- $temp = $arr[$i];
- $arr[$i] = $arr[$i+1];
- $arr[$i+1] = $temp;
- }
- }
- $len--;
- }
- return $arr;
- }
- // 调用冒泡排序函数
- $arr = array(6, 5, 3, 1, 8, 7, 2, 4);
- var_export(bubble_sort($arr));
- ?>
代码执行的结果是:
- array (
- 0 => 1,
- 1 => 2,
- 2 => 3,
- 3 => 4,
- 4 => 5,
- 5 => 6,
- 6 => 7,
- 7 => 8,
- )
再来一张图梳理下冒泡排序算法的流程:
插入排序特性:
- 最差时间复杂度: O(n2)
- 最优时间复杂度: O(n)
- 平均时间复杂度: O(n2)
- 最差空间复杂度: 总共O(n) ,需要辅助空间O(1)
- 排序是否稳定的: 是
Fancy点评:
冒泡排序也是一种朴素的算法,核心思想就是通过遍历数列和成对比较大小,将某个较大的元素一直移动到适当的位置,然后再进行下一次遍历,移动下一个需要移动的元素。冒泡排序和插入排序有些类似,冒泡排序的效率更低。
冒泡排序和插入排序的存在的作用差不多,都只是初学者开始学习算法及排序的一个简单引导。
转自:http://www.fancycedar.info/2013/05/bubble-sort-php-example/

浙公网安备 33010602011771号