冒泡排序原理: 当一群泡(使用数组: 数据), 数据大就是大泡, 小的就是小泡: 将两个相邻的泡进行比较: 如果左边的大于右边: 交换; 否则继续下一轮比较: 一组比完之后只能出现一个大泡: 连续进行多轮(数组长度- 1轮)
代码实现
/** * 冒泡算法 * @param array $arr 待排序的数组 * @return array 已经排序好的数组 */ function bubble_sort($arr) { // 外层循环控制轮数: 数组进行几轮 for ($i = 0,$len = count($arr); $i < $len;$i++) { // 内存循环: 针对每一轮将所有的元素都进行一次比较 // j的长度需要在原始长度上 - 1:因为在使用过程中会对长度 进行 + 1操作: 如果是使用原始长度,那么最后一个元素的时候会因为+1操作而溢出 for($j = 0;$j < $len - 1 - $i;$j++){ // 比较: 左边大于右边: 交换; 小于右边: 什么都不做 if($arr[$j] > $arr[$j + 1]){ // 交换 // 通过第三个变量保存左边变量 $temp = $arr[$j]; // 将第二个值赋值给第一个值 $arr[$j] = $arr[$j+1]; // 将第三个变量的值复制个第二个变量 $arr[$j + 1] = $temp; } } } //返回排序结果 return $arr; } // 定义数组 $arr = array(5,2,3,9,1,0); // 调用函数 print_r(bubble_sort($arr)); // Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 5 [5] => 9 )