冒泡算法
/**
* @param $arr
* @return mixed
* 冒泡排序算法
*/
function buSort($arr)
{
$count = count($arr);
$num = "";
for ($j = 0; $j < $count - 1; $j++) {
for ($i = 0; $i < $count - ($j + 1); $i++) {
if ($arr[$i] > $arr[$i + 1]) {
$num = $arr[$i];
$arr[$i] = $arr[$i + 1];
$arr[$i + 1] = $num;
}
}
}
return $arr;
}
选择算法
/**
* @param $arr
* @return mixed
* 选择排序算法
*/
function seSort($arr)
{
$count = count($arr); //计算数组的长度
for ($j = 0; $j < $count; $j++) {
//假设第一个是最小的值
$mIndex = $j; //最小值的索引是0
for ($i = $j + 1; $i < $count; $i++) {
if ($arr[$mIndex] > $arr[$i]) {
$mIndex = $i; //记录更小值的索引 key
}
}
if ($mIndex != $j) {//说明前面对比过程中 发现了比初始假设值更小的
//交换位置
$tmp = $arr[$j];
$arr[$j] = $arr[$mIndex];
$arr[$mIndex] = $tmp;
}
}
return $arr;
}
插入算法
/**
* @param $arr
* @return mixed
* 插入排序算法
*/
function insertSort($arr)
{
$count = count($arr); //数组的元素数量
for ($i = 1; $i < $count; $i++) {
//和前面的数比较 有可能和前面所有的数都做比较
for ($j = $i - 1; $j >= 0; $j--) { //下标为 $i-1 的数 是当前取出来的数的前面的数
if ($arr[$j + 1] < $arr[$j]) {
//变量交换
$tmp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $tmp;
} else {
break;
}
}
}
return $arr;
}
快速算法
/**
* @param $arr
* @return array
* 快速排序算法
*/
function quickSort($arr)
{
//判断长度 是否<=1
if (count($arr) <= 1) {
return $arr;
}
$count = count($arr);
//取第一值
$base = $arr[0];
$left = [];
$right = [];
for ($i = 1; $i < $count; $i++) {
if ($arr[$i] < $base) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
//quickSort($left);
//quickSort($right);
return array_merge(quickSort($left), [$base], quickSort($right));
}