(一)冒泡排序
/**
* 冒泡排序:
* 使用相邻的元素挨个比较一次 符合条件交换位置
* @param $arr
*/
function bubbleSort($arr)
{
$length = count($arr);
for ($i = 0; $i < $length - 1; $i++) { //控制轮数 length个数只需要比较length-1轮
//控制每一轮的比较:并选出一个最大数
//索引值应该是从0开始 --->到每一轮的倒数第二个结束 与其对应的后面一个元素进行比较
//每一轮选出一个最大值以后 下一轮就少掉一个值 :
//第一轮i=0,少0个; j<arr.length-1-0
//第二轮i=1,少1个; j<arr.length-1-1
//第三轮i=2,少2个 j<arr.length-1-2
for ($j = 0; $j < $length - 1 - $i; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
}
}
}
return $arr;
}
(二)选择排序
/*
选择排序)
使用一个元素与其他元素挨个比较一次 如果符合条件则交换位置
*/
function selectSort($arr)
{
$length = count($arr);
//使用每个元素与其后面的所有元素挨个比较一次 符合条件则交换位置
for ($i = 0; $i < $length - 1; $i++) {//被比较的数 从第一个到倒数第二个
for ($j = $i + 1; $j < $length; $j++) {//要比较的其他所有数 从被比较的数后面一个开始 一直到最后一个数
if ($arr[$i] > $arr[$j]) {
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}
(三)快速排序
/**
* 快速排序
* 通过设置一个初始中间值,来将需要排序的数组分成3部分,小于中间值的左边,中间值,大于中间值的右边,
* 继续递归用相同的方式来排序左边和右边,最后合并数组
* @param $arr
* @return array
*/
function quickSort($arr)
{
// 如果个数为空或者1,则原样返回数组
if (count($arr) <= 1) {
return $arr;
}
$middle = $arr[0]; // 初始中间值
$left = array(); // 接收小于中间值
$right = array();// 接收大于中间值
// 循环比较
for ($i = 1; $i < count($arr); $i++) {
if ($arr[$i] > $middle) {
// 大于中间值
$right[] = $arr[$i];
} else {
// 小于或等于中间值
$left[] = $arr[$i];
}
}
// 递归排序划分好的2边
$left = quickSort($left);
$right = quickSort($right);
// 合并排序后的数据,别忘了合并中间值
return array_merge($left, array($middle), $right);
}