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;
}

這種排序算法比較常見,適用範圍廣。遞歸

相關文章
相關標籤/搜索