冒泡排序,英语为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/冒泡排序)上的图片,帮助进一步理解冒泡排序算法的思想