學習php常用算法


<?php 
/*學用php算法*/




/*1、冒泡法
    *思路分析:在要排序的一組數中,對當前還未排好的序列,
    *從前往后對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。
    *即,每當兩相鄰的數比較后發現它們的排序與排序要求相反時,就將它們互換。
    *比如:
    *第一次循環:第一步(1:43)第二步(43:54)第三步(54:62)第四步(62:21)這時則死換變成了(21:62)........(76:39)
    *第二次循環:第一步(1:43)第二步(43:54)第三步(54:62)第四步(62:21)這時則死換變成了(21:62)........(36:76)
    
*/

$arr=array(1,43,54,62,21,66,32,78,36,76,39);   
function bubbleSort($arr)  
{   
    $len=count($arr);  
    //該層循環控制 需要冒泡的輪數  
    for($i=1;$i<$len;$i++)  
    { //該層循環用來控制每輪 冒出一個數 需要比較的次數  
        for($k=0;$k<$len-$i;$k++)  
        {  
            if($arr[$k]>$arr[$k+1])  
            {  
                $tmp=$arr[$k+1];  
                $arr[$k+1]=$arr[$k];  
                $arr[$k]=$tmp;  
            }  
        }  
    }  
    return $arr;  
} 



/*2.選擇排序
    *思路分析:在要排序的一組數中,選出最小的一個數與第一個位置的數交換。
    *然后在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最后一個數比較為止。
*/
function selectSort($arr) 
{
    //雙重循環完成,外層控制輪數,內層控制比較次數(7.5.2.9.3)
    $len=count($arr);
    for($i=0; $i<$len-1; $i++) 
    {
        //先假設最小的值的位置
        $p = $i;

        for($j=$i+1; $j<$len; $j++) 
        {
            //$arr[$p] 是當前已知的最小值
            if($arr[$p] > $arr[$j]) 
            {
                //比較,發現更小的,記錄下最小值的位置;並且在下次比較時采用已知的最小值進行比較。
                $p = $j;
            }
        }
        //已經確定了當前的最小值的位置,保存到$p中。如果發現最小值的位置與當前假設的位置$i不同,則位置互換即可。
        if($p != $i) 
        {
            $tmp = $arr[$p];
            $arr[$p] = $arr[$i];
            $arr[$i] = $tmp;
        }
    }
    //返回最終結果
    return $arr;
}



 ?>

 


免責聲明!

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



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