php經常使用算法

/**數組

  • 冒泡排序
  • 思路:法如其名,就是像冒泡同樣,每次從數組中冒出一個最大的數出來

*/ui

function bubble_sort($array){code

$count = count($array);
if($count <= 0) return false;
for ($i = 0;$i < $count;$i++){
    for($j = $count - 1;$j > $i;$j--){
        if($array[$j] < $array[$j-1]){
            $temp = $array[$j];
            $array[$j] = $array[$j-1];
            $array[$j-1] = $temp;
        }
    }
}
return $array;

}排序

/**io

  • 快速排序

*/
function quick_sort($array){function

$count = count($array);
if($count <= 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for($i = 1;$i < $count;$i++){
    if($key > $array[$i]){
        $left_arr[] = $array[$i];
    }else{
        $right_arr = $array[$i];
    }
}
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr,array($key),$right_arr);

}select

/**循環

  • 選擇排序法
  • 思路:每次選擇一個相應的元素,而後將其放到指定的位置

*/
function select_sort($arr){sort

//實現思路,雙重循環完成,外層控制輪數,當前的最小值。內層控制比較次數
//$i 當前最小值的位置,須要參與比較的元素
for ($i = 0,$len = count($arr);$i < $len;$i++){
    //先假設最小的值的位置
    $p = $i;
    //$j 當前都須要和哪些元素比較,$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;

}移動

/**

  • 插入排序法
  • 思路:將要排序的元素插入到已經假定排序號的數組的指定位置

*/
function insert_sort($arr){

//區分哪部分是已經排序好的
//哪部分是沒有排序的
//找到其中一個須要排序的元素
//這個元素就是從第二個元素開始,到最後一個元素都是這個須要排序的元素
//利用循環就能夠標誌出來
//i循環控制,每次須要插入的元素,一旦須要插入的元素控制好了,
//間接已經將數組分紅了2部分,下標小於當前的(左邊的),是排序好的序列
for($i = 1,$len = count($arr);$i < $len;$i++){
    //得到當前須要比較的元素值
    $tmp = $arr[$i];
    //內層循環控制比較並插入
    for($j = $i-1;$j >= 0;$j--){
        //$arr[$j],須要插入的元素,$arr[$j],須要比較的元素
        if($tmp < $arr[$j]){
            //發現插入的元素要小,互換位置
            //將後邊的元素與前面的元素交換
            $arr[$j+1] = $arr[$j];
            //將前面的數設置爲當前須要交換的數
            $arr[$j] = $tmp;
        }else{
            //若是碰到不須要移動的元素
            //因爲是已經排序好的數組,則前面的就不須要再次比較了
            break;
        }
    }
}
//將這個元素插入到已經排序好的序列內
//返回
return $arr;

}

相關文章
相關標籤/搜索