一、冒泡排序
/**
* 冒泡排序
* @param array $arr
* @return array
**/
function bubbleSort($arr)
{
$length = count($arr);
// 从数组键为0开始循环到最后一个
for($i = 0; $i < $length; $i++){
// 从数组键为$i+1开始循环到最后一个
for($j = $i+1; $j < $length; $j++){
// 比较数组两个相邻值的大小
if($arr[$i] > $arr[$j]){
$temp = $arr[$i]; // 临时变量储存$i的值
$arr[$i] = $arr[$j]; // 第一次更换位置
$arr[$j] = $temp; // 完成位置互换
}
}
}
return $arr;
}
$result = bubbleSort($arr);
二、快速排序
/**
* 快速排序
* @param array $arr
* @return array
**/
function quickSort($arr)
{
$length = count($arr);
// 先判断是否需要继续进行
if($length <= 1) return $arr;
// 初始化两个数组
$leftArray = []; // 小于基准的放左边数组
$rightArray = []; // 大于基准的放右边数组
for($i = 1; $i < $length; $i++){ // 遍历基准值以外的所有元素,按大小关系放入两个数组内
if($arr[$i] <= $arr[0]){
$leftArray[] = $arr[$i];
}else{
$rightArray[] = $arr[$i];
}
}
// 对左右两个数组进行相同的排序处理方式递归调用这个函数
$leftArray = quickSort($leftArray);
$rightArray = quickSort($rightArray);
// 合并左数组、基准值、右数组
return array_merge($leftArray, array($arr[0]), $rightArray);
}
$result = quickSort($arr);
三、选择排序
/**
* 选择排序
* @param array $arr
* @return array
**/
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;
}
}
// 已经确定当前的最小值的位置,保存到$p中;如果发现最小值的位置与当前假设的位置$i不一致,则位置互换即可。
if($p != $i){
$temp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $temp;
}
}
return $arr;
}
$result = selectSort($arr);
四、插入排序
/**
* 插入排序
* @param array $arr
* @return array
**/
function insertSort($arr)
{
$length = count($arr);
for($i=1;$i<$length;$i++){
$temp = $arr[$i];
// 内层循环控制,比较并插入
for($j=$i-1;$j>=0;$j--){
if($temp < $arr[$j]){
// 发现插入的元素要小,交换位置,将后面的元素与前面的元素互换
$arr[$j+1] = $arr[$j];
$arr[$j] = $temp;
}else{
// 如果碰到不需要移动的元素,由于已经是排序好的数组,则前面的就不需要再次比较了。
break;
}
}
}
return $arr;
}
$result = insertSort($arr);