冒泡排序-選擇排序-快速排序(PHP實現)

冒泡排序

$arr=array(5,3,6,9,10);
$str='';
//冒泡排序  向右冒,小數冒泡
for($i=0;$i<count($arr)-1;$i++){
    for($j=0;$j<count($arr)-1-$i;$j++){
        if($arr[$j]<$arr[$j+1]){
            $str=$arr[$j];
            $arr[$j]=$arr[$j+1];
            $arr[$j+1]=$str;
        }
    }
}
var_dump($arr);

選擇排序

$arr=array(5,3,6,9,10);
$str='';
//選擇排序
for($i=0;$i<count($arr)-1;$i++){
    //假設$m是最大值的位置
    $m=$i;
    //$j 和$i後面的比較
    for($j=$i+1;$j<count($arr);$j++){
        if($arr[$m]<$arr[$j]){
           //確定最大值位置
            $m=$j;
        }
    }
    //如果最大值位置和當前位置不同,則交換位置
    if($m != $i){
        $str=$arr[$m];
        $arr[$m]=$arr[$i];
        $arr[$i]=$str;
    }
}
var_dump($arr);

快速排序

快速排序的原理:找到當前數組中的任意一個元素(一般選擇第一個元素),作爲標準,新建兩個空數組,遍歷整個數組元素,如果遍歷到的元素比當前的元素要小,那麼就放到左邊的數組,否則放到右面的數組,然後再對新數組進行同樣的操作,

使用遞歸,需要找到遞歸點和遞歸出口:

遞歸點:如果數組的元素大於1,就需要再進行分解,所以我們的遞歸點就是新構造的數組元素個數大於1

遞歸出口:我們什麼時候不需要再對新數組不進行排序了呢?就是當數組元素個數變成1的時候,所以這就是我們的出口

<?php 
$arr=array(5,3,6,9,10);
function paixu($arr){
    $length=count($arr);
    if($length<=1) return $arr;
    $left=array();
    $right=array();
    
    for($i=1;$i<$length;$i++){
       if($arr[$i]<$arr[0]){
           $left[]=$arr[$i];
       }else{
           $right[]=$arr[$i];
       }
    }
    $left=paixu($left);
    $right=paixu($right);
    return array_merge($left,array($arr[0]),$right);
}
var_dump(paixu($arr));
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章