php數組排序和查找的算法


1.php算法

// 算法
// 1.冒泡排序 => 思路:​每次循環排列出一個最大的數
// echo '<pre>';
$arr = [
    1,43,54,62,21,66,32,78,36,76,39
];//11

function getPao($arr){
    $len = count($arr);

    for($i=1;$i<$len;$i++){

        for($j=0;$j<$len-$i;$j++){
            if($arr[$j]>$arr[$j+1]){
                $tmp = $arr[$j+1];
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            }
        }

    }
    return $arr;
}

// $arr = getPao($arr);
// var_dump($arr);

// 2. 選擇排序
function selectSort($arr){
    for($i=0,$len=count($arr);$i<$len-1;$i++){
        $p = $i;
        for($j=$i+1;$j<$len;$j++){
            if($arr[$p]>$arr[$j]){
                $p=$j;
            }
        }
        if($p != $i){
            $tmp = $arr[$p];
            $arr[$p] = $arr[$i];
            $arr[$i] = $tmp;
        }
        var_dump($arr);echo '<br/>';
    }
    return $arr;
}
$arr = selectSort($arr);exit;
// var_dump($arr);
/*
$arr = [
    1,43,54,62,21,66,32,78,36,76,39
];//11
*/
// 3 插入排序
function insertSort($arr){
    for($i=1,$len=count($arr);$i<$len;$i++){
        $tmp = $arr[$i];

        for($j=$i-1;$j>=0;$j--){
            if($tmp < $arr[$j]){
                $arr[$j+1] = $arr[$j];
                $arr[$j] = $tmp;
            }else{
                break;
            }
        }
        // var_dump($arr);echo '<br/>';
    }
    return $arr;
}
// $arr = insertSort($arr);exit;

// var_dump($arr);

// 4.快速排序
/*
思路:先對數組進行分割, 把大的元素數值放到一個臨時數組里,把小的元素數值放到另一個臨時數組里(這個分割的點可以是數組中的任意一個元素值,一般用第一個元素,即$array[0]),然后繼續把這兩個臨時數組重復上面拆分,
最后把小的數組元素和大的數組元素合並起來。這里用到了遞歸的思想。
*/ function quick_sork($arr){ if (!is_array($arr)) return ; $length = count($arr); if($length<=1) return $arr; $left = $right = []; for($i=1;$i<$length;$i++){ if($arr[$i]<$arr[0]){ $left[] = $arr[$i]; }else{ $right[] = $arr[$i]; } } $left = quick_sork($left); $right = quick_sork($right); return array_merge($left,[$arr[0]],$right); } $arr = quick_sork($arr); var_dump($arr); // 參考資料:https://www.cnblogs.com/isykw/p/6115461.html // 5. 二分查找法 // 二分查找的數組必須是排列好的 function binSearch($arr,$search){ $height = count($arr)-1; $low = 0; while($low<=$height){ $mid = floor(($low+$height)/2);// 獲取中間數 if($arr[$mid] == $search){ return $mid; }elseif($arr[$mid] < $search){ $low = $mid+1; }elseif($arr[$mid] >$search){ $height = $mid-1; } } return '查找失敗'; } // $search = binSearch($arr,43); // var_dump($search); // 二分查找遞歸實現 function binSearch2($arr,$low,$height,$k){ if($low<=$height){ $mid = floor(($low+$height)/2); if($arr[$mid] == $k){ return $mid; }elseif($arr[$mid]<$k){ return binSearch2($arr,$mid+1,$height,$k); }elseif($arr[$mid]>$k){ return binSearch2($arr,$low,$mid-1,$k); } } return -1; } $search = binSearch($arr,43); var_dump($search);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM