/**
* 快速排序
* 循环遍历,定义一个标尺,让左边的不大于他,右边的不小于他
* @param $arr
* @return array
*/
function quickSort($arr) {
$length = count($arr);
if ($length <= 1) {
return $arr;
}
$base = $arr[0];
$leftArr = [];
$rightArr = [];
for ($i = 1; $i < $length; $i++) {
if ($arr[$i] < $base) {
$leftArr[] = $arr[$i];
} else {
$rightArr[] = $arr[$i];
}
}
$leftArr = $this->quickSort($leftArr);
$rightArr = $this->quickSort($rightArr);
return array_merge($leftArr, [$base], $rightArr);
}
/**
* 冒泡排序
* 逐个冒泡 出最大的值
* @param $arr
*/
function bubbleSort($arr) {
$length = count($arr);
//外层 循环多少次
for ($i = 0; $i < $length - 1; $i++) {
//内层求出每次的最大值
for ($k = 0; $k < $length - $i - 1; $k++) {
if ($arr[$k] > $arr[$k + 1]) {
$kValue = $arr[$k + 1];
$arr[$k + 1] = $arr[$k];
$arr[$k] = $kValue;
}
}
}
return $arr;
}
/**
* 选择排序 将对应的值放到指定位置
* @param $arr
* @return mixed
*/
function selectSort($arr) {
// 获取长度
$length = count($arr);
//控制循环次数 和获取最小值
for ($i = 0; $i < $length - 1; $i++) {
// 假设最小值的位置
$p = $i;
// 使用假设的最小值和其他值比较,找到当前的最小值
for ($j = $i + 1; $j < $length; $j++) {
// $arr[$p] 是已知的当前最小值
// 判断当前循环值和已知最小值的比较,当发下更小的值时记录下键,并进行下一次比较
if ($arr[$p] > $arr[$j]) {
$p = $j; // 比假设的值更小
}
}
// 通过内部for循环找到了当前最小值的key,并保存在$p中
// 判断 日光当前$p 中的键和假设的最小值的键不一致增将其互换
if ($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
// 返回最终结果
return $arr;
}