php排序算法
(一)冒泡排序
/** * 冒泡排序: * 使用相邻的元素挨个比较一次 符合条件交换位置 * @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); }
=======================================
由于本人水平有限,文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论哦。你也可以关注我,一起学习哦!