(一)冒泡排序
/** * 冒泡排序: * 使用相邻的元素挨个比较一次 符合条件交换位置 * @param $arr */function bubbleSort($arr){ $length = count($arr); for ($i = 0; $i < $length - 1; $i++) { //控制轮数 length个数只需要比较length-1轮 //控制每一轮的比较:并选出一个最大数 //索引值应该是从0开始 --->到每一轮的倒数第二个结束 与其对应的后面一个元素进行比较 //每一轮选出一个最大值以后 下一轮就少掉一个值 : //第一轮i=0,少0个; 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);}