从左向右依次排序。通过依次比对临近2个值的大小。确认是否调换位置。可以找出最大/最小的值。然后再继续查找第二大/小的值。直到排序完毕,每一次比对次数比上一次少一次。
/** * @desc 冒泡排序:从左向右依次排序。通过依次比对临近2个值的大小。确认是否调换位置。可以找出最大/最小的值。然后再继续查找第二大/小的值。直到排序完毕,每一次比对次数比上一次少一次。 * @param $arr * @return mixed */ public function bubblingSort($arr) { for($i=0; $i < count($arr); $i++) { for ($j=0; $j < count($arr) - 1 - $i; $j++) { // 从小到大排序 > 从大到小排序 < if ($arr[$j] > $arr[$j + 1]) { $tmp = $arr[$j]; $arr[$j] = $arr[$j + 1]; $arr[$j + 1] = $tmp; } } } return $arr; }使用递归,以其中一个元素为基准。循环其它元素与基准元素比对。并按照大于基准元素/小于基准元素分为2个数组。再递归拆分直到所有元素都排序完。最后合并左侧和右侧数据
/** * @desc 快速排序法 * @param $arr */ public function quickSort($arr) { // 剩余最后1个结束排序 if (count($arr) <= 1) { return $arr; } // 取中间值 $middle = $arr[0]; // 左侧数组 $left_arr = []; // 右侧数组 $right_arr = []; for ($i = 1; $i < count($arr); $i++) { // 从大到小排序 < 从小到大排序 > if ($middle < $arr[$i]) { $left_arr[] = $arr[$i]; } else { $right_arr[] = $arr[$i]; } } // 递归排序左右2侧的数组 $left_arr = $this->quickSort($left_arr); $right_arr = $this->quickSort($right_arr); // 合并数组 左侧 中间值 右侧 return array_merge($left_arr, [$middle], $right_arr); }