博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php排序算法
阅读量:7005 次
发布时间:2019-06-27

本文共 1750 字,大约阅读时间需要 5 分钟。

(一)冒泡排序

/** * 冒泡排序: * 使用相邻的元素挨个比较一次 符合条件交换位置 * @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);}

 

转载于:https://www.cnblogs.com/jxl1996/p/10138888.html

你可能感兴趣的文章