php实现的冒泡算法

冒泡排序,英语为Bubble Sort,台湾翻译为泡沫排序。时间复杂度为O(n^2),空间复杂度为O(1),属于原地排序,是稳定的排序算法。

以升序为例,冒泡排序可以这样描述:
1 比较相邻的两个元素,如果第一个元素大于第二个元素,就交换他们
2 对每一个相邻元素进行交互,直到最后一个。一趟下来,最大的元素就到了最后
3 针对所有的元素重复上面的操作,直到没有元素可以交换

总结一下就是:交换相邻元素,大数沉底

php代码如下:
<?php
function bubble_sort($arr, $sort = true){
   if(empty($arr) || !is_array($arr)) return false;
   $count = count($arr);
   for($i = 0;$i < $count; $i ++){
      for($j = 1;$j < $count - $i;$j ++){
         if(($sort && $arr[$j - 1] > $arr[$j]) || (!$sort && $arr[$j - 1] < $arr[$j])){
            list($arr[$j], $arr[$j -1]) = array($arr[$j -1], $arr[$j]);
         }
      }
   }
   return $arr;
}

$arr = [1, 6, 8, 10, 2, 5, 7, 9, 1];
echo "原始数据:\n";
print_r($arr);
echo "升序后的数据:\n";
print_r(bubble_sort($arr));

运行结果如下:

原始数据:
Array
(
    [0] => 1
    [1] => 6
    [2] => 8
    [3] => 10
    [4] => 2
    [5] => 5
    [6] => 7
    [7] => 9
    [8] => 1
)
升序后的数据:
Array
(
    [0] => 1
    [1] => 1
    [2] => 2
    [3] => 5
    [4] => 6
    [5] => 7
    [6] => 8
    [7] => 9
    [8] => 10
)


引用http://www.cnblogs.com/chengxiao/p/6103002.html博客上的图片,更进一步说明算法的步骤

引用一些维基百科(https://zh.wikipedia.org/wiki/冒泡排序)上的图片,帮助进一步理解冒泡排序算法的思想

冒泡排序.jpg


Bubble sort animation.gif

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值