冒泡排序PHP实现

冒泡排序容易给人留下印象,因为这个算法的名字“冒泡”非常生动形象。这个名字由来是因为较小的元素会经由交换慢慢“浮”到数列的顶端,就像水中的气泡一样。

冒泡排序算法的原理如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

下面借助一个动画来直观地演示这个冒泡的过程:

冒泡排序过程演示

冒泡排序过程演示

冒泡排序的PHP代码为:

  1. <?php
  2. function bubble_sort($arr){
  3.     $len = count($arr);
  4.     while($len > 0){
  5.         for($i = 0$i < $len-1$i++){
  6.             // $i 与 $i+1 每次为一对相邻元素,比较后交换
  7.             if($arr[$i] > $arr[$i+1]){
  8.                 $temp = $arr[$i];
  9.                 $arr[$i] = $arr[$i+1];
  10.                 $arr[$i+1] = $temp;
  11.             }
  12.         }
  13.         $len--;
  14.     }
  15.     return $arr;
  16. }
  17.  
  18. // 调用冒泡排序函数
  19. $arr = array(65318724);
  20. var_export(bubble_sort($arr));
  21. ?>

代码执行的结果是:

  1. array (
  2.   0 => 1,
  3.   1 => 2,
  4.   2 => 3,
  5.   3 => 4,
  6.   4 => 5,
  7.   5 => 6,
  8.   6 => 7,
  9.   7 => 8,
  10. )

再来一张图梳理下冒泡排序算法的流程:

冒泡排序算法流程

冒泡排序算法流程

插入排序特性:

  • 最差时间复杂度: O(n2)
  • 最优时间复杂度: O(n)
  • 平均时间复杂度: O(n2)
  • 最差空间复杂度: 总共O(n) ,需要辅助空间O(1)
  • 排序是否稳定的: 是

Fancy点评:

冒泡排序也是一种朴素的算法,核心思想就是通过遍历数列和成对比较大小,将某个较大的元素一直移动到适当的位置,然后再进行下一次遍历,移动下一个需要移动的元素。冒泡排序和插入排序有些类似,冒泡排序的效率更低。

冒泡排序和插入排序的存在的作用差不多,都只是初学者开始学习算法及排序的一个简单引导。

 

转自:http://www.fancycedar.info/2013/05/bubble-sort-php-example/

posted @ 2013-06-09 14:56  chen1706  阅读(97)  评论(0)    收藏  举报