<?php /** * Created by PhpStorm. * User: Spectre * Date: 2017/8/3 * Time: 14:41 */ /** * 时间复杂付为 n*n * @param array $value * @return array */ function bubble($value = []) { $length = count($value) - 1; for ($i = 0; $i<$length; $i++) { for ($j = 0; $j<$length; $j++) { if ($value[$j + 1] < $value[$j]) { $tmp = $value[$j+1]; $value[$j + 1] = $value[$j]; $value[$j] = $tmp; } } } return $value; } /** * 优化冒泡排序 * * 时间复杂付为 (n*n) /2 * @param array $value 待排序数组 * @return array */ function bubble_better($value = []) { $last = ''; $flag = true; // 标示 排序未完成 $length = count($value)-1; // 数组长度 $index = $length; // 最后一次交换的索引位置 初始值为最后一位 while ($flag) { $flag = false; // 假设排序已完成 for ($i=0; $i < $index; $i++) { if ($value[$i] > $value[$i+1]) { $flag = true; // 如果还有交换发生 则排序未完成 $last = $i; // 记录最后一次发生交换的索引位置 $tmp = $value[$i]; $value[$i] = $value[$i+1]; $value[$i+1] = $tmp; } } $index = $last; } return $value; } // 初始值 $data = [11, 67, 3, 121, 71, 6, 100, 45, 2, 19, 17, 99, 40, 3, 22]; var_dump($data); echo "---------"; var_dump(bubble($data)); echo " "; var_dump(bubble_better($data));