php實現排序(選擇,冒泡,快速)

選擇排序

選擇排序主要是將假設數組中的第一個是最小的,循環與數組中的第一個進行比較 若是比其還小 則記錄下標 進行數值交換 效率相對冒泡來講比較高數組

function selection_sort($array){
    $count=count($array);
    for($i=0;$i<$count-1;$i++){
        /*findtheminest*/
        $min=$i;
        echo'$min-->'.$array[$min].'-->';
        for($j=$i+1;$j<$count;$j++){
            //由小到大排列
            if($array[$min]>$array[$j]){
                //代表當前最小的還比當前的元素大
                $min=$j;
                //賦值新的最小的
            }
        }
        echo$array[$min].'coco<br/>';
        /*swap$array[$i]and$array[$min]即將當前內循環的最小元素放在$i位置上*/
        if($min!=$i){
            $temp=$array[$min];
            $array[$min]=$array[$i];
            $array[$i]=$temp;
        }
    }
    return$array;
}

冒泡排序:

冒泡排序是將數組中的先後兩個相領的數值進行比較 條件成立 則進行交換 效率比較低 由於其交換的次數也比較多ui

function bubbleSort($numbers) {
$cnt = count($numbers);
for ($i = 0; $i < $cnt; $i++) {
    for ($j = 0; $j < $cnt - $i - 1; $j++) {
        if ($numbers[$j] > $numbers[$j + 1]) {
            $temp = $numbers[$j];
            $numbers[$j] = $numbers[$j + 1];
            $numbers[$j + 1] = $temp;
        }
    }
}

return $numbers;

}code

插入排序:

插入排序是將插入的數據保存在變量中,與數組中的每一個數比較 找到合適的位置 進行插入 效率相對來講比較高對象

function insertSort($arr)
{    
     for($i=0;$i<count($arr);$i++){
         //當前要插入的值與下標
         $insertVal=$arr[$i];
         $insertIndex=$i-1;
         //判斷當前的值是否大於0而且大於它要插入的數
         while($insertIndex>=0&&$insertVal<$arr[$insertIndex])
         {
             $arr[$insertIndex+1]=$arr[$insertIndex];
             $insertIndex--;
         }
         $arr[$insertIndex+1]=$insertVal;
     }
}

快速插入:

快速排序由C. A. R.
Hoare在1962年提出。它的基本思想是:經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列。效率很高排序

function quick_sort($arr)
    {
        //判斷參數是不是一個數組
        if(!is_array($arr)) 
           return false;
        //遞歸出口:數組長度爲1,直接返回數組
        $length=count($arr);
        if($length<=1) return $arr;
        //數組元素有多個,則定義兩個空數組
        $left=$right=array();
        //使用for循環進行遍歷,把第一個元素當作比較的對象
        for($i=1;$i<$length;$i++)
        {
            //判斷當前元素的大小
            if($arr[$i]<$arr[0]){
                $left[]=$arr[$i];
            }else{
                $right[]=$arr[$i];
            }
        }
        //遞歸調用
        $left=quick_sort($left);
        $right=quick_sort($right);
        //將全部的結果合併
        return array_merge($left,array($arr[0]),$right);
        }
相關文章
相關標籤/搜索