php 冒泡排序

<?php
//方法一
function getSortArr($array){
    $count = count($array);
    for($i=0;$i<$count-1;$i++){
//從前向後
        for($j=0;$j<$count-1-$i;$j++){
            $temp = '';
            if($array[$j]>$array[$j+1]){ //如果是從大到小的話,只要在這裏的判斷改成if($array[$j]<$array[$j+1])就可以了
                $temp = $array[$j];
                $array[$j] = $array[$j+1];
                $array[$j+1] = $temp;
            }
        }
    }
    return $array;
}
//方法二
function getSortArr2($array){
    $count = count($array);
    for ($i=0; $i < $count-1; $i++) {
//從後向前
        for($j=$count-1; $j>$i; $j--){
            $temp = '';
            if($array[$j]<$array[$j-1]){
                $temp = $array[$j];
                $array[$j] = $array[$j-1];
                $array[$j-1] = $temp;
            }
        }
    }
    return $array;
}
//優化後
function getSortArr3($array){
    $count = count($array);
    if($count <= 1){
        return $array;
    }
    $flag = false;
    for($i=0;$i<$count-1;$i++){
        for($j=0;$j<$count-1-$i;$j++){
            $temp = '';
            if($array[$j]>$array[$j+1]){
                $temp = $array[$j];
                $array[$j] = $array[$j+1];
                $array[$j+1] = $temp;
                $flag = true;
            }
        }
        if(!$flag){ //如果if($array[$j]>$array[$j+1])沒有執行,則$flag爲false
            $flag = false;
            break; //直接跳出本次循環
        }
    }
    return $array;
}
$arr = [3,24,55,223,76,22,11,89,2,4,5,28,11];
$sortArr = getSortArr3($arr);
print_r($sortArr);
?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章