PHP经典排序算法

1.快速排序(递归)php

实现思路:以$arr=[29,3,44,6,77,56,22,2223,33]数组为例,以数组的第一个元素为参照,小于等于他的元素归为$minArr=[3,6,22],大于他的元素归为$maxArr=[44,77,56,2223,33];最后返回数据应该是 $minArr ,$arr[0],$maxArr组成,若是数组只有一个或者少于一个元素,则直接返回这个数组;再用一样的方法去排序$minArrr和$maxArr.代码以下:算法

/**
 * 快速排序(递归方法实现)
 * @param type $arr
 */ 
function meSort($arr)
{
    // 获取数组元素个数
    $len = count($arr);
    
    // 递归出口:若是数组元素少于等于一个,则直接返回
    if($len <= 1)return $arr;
    
    // 以数组第一个元素为参照元素
    $mid = $arr[0];
    
    // 小于等于参照元素的数组元素
    $minArr = [];
    
    // 大于参照元素的数据元素
    $maxArr = [];
    
    // 找出$minArr 和 $maxArr
    for($i=1;$i<$len;++$i){
	if($arr[$i]<=$mid){
	    $minArr[] = $arr[$i];
	}else{
	    $maxArr[] = $arr[$i];
	}
    }
    
    // 返回且合并 $minArr 和 $mid 和 $maxArr;以一样的方法去排序 $minArr 和 $maxArr
    return array_merge(meSort($minArr),[$mid],meSort($maxArr));
}

这种排序方法适合须要排序的数组元素个数没有那么多,若是数组元素个数过多,递归的次数就会越多,效率会越慢.数组

2.冒泡排序code

实现思路:以$arr=[29,3,44,6,77,56,22,2223,33]数组为例,从第一个元素开始和他的后一个元素进行比较,若是他的后一个元素比他小,则二者交换位置,以此类推,代码以下:排序

<?php
/**
 * PHP经典排序算法 - 冒泡排序
 * $arr array 须要排序的数组
 */
function meSort($arr)
{
    // 计算数组的元素个数
    $len = count($arr);
    
    // 若是数组元素个数小于等于一个 则直接返回数组
    if($len <= 1)return $arr;
    
    // 外层循环 控制须要排序的元素个数
    for($i = 0;$i < $len;++$i){
        //内层循环 控制每次循环的目标元素(最大的元素)
        for($j = 0;$j < $len-1-$i; ++$j){
            // 元素交换位置 寻找出本轮最大的元素
            if($arr[$j] > $arr[$j+1]){
                $tem = $arr[$j + 1];
                
                //交换位置
                $arr[$j + 1] = $arr[$j];
                $arr[$j] = $tem;
            }
        }
    }
    
    // 返回结果
    return $arr;
}

这种排序算法比较常见,适用范围广。递归

相关文章
相关标签/搜索