【PHP】幾種經典排序算法


  • 選擇排序

原理:第一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,然后再從剩余的未排序元素中尋找到最小(大)元素,然后放到已排序的序列的末尾。以此類推,直到全部待排序的數據元素的個數為零。

function selectSort($arr) {
    $len = count($arr);
    for ($i=0;$i<$len;$i++) {
        $minIndex = $i;
        for ($j=$i+1;$j<$len;$j++) {
            if ($arr[$j] < $arr[$minIndex]) {
                $minIndex = $j;
            }

        }
        //如果選出的索引和當前的最小數索引不一致,互換
        if ($minIndex != $i) {
            $t = $arr[$i];
            $arr[$i] = $arr[$minindex];
            $arr[$minindex] = $t;
        }
    }
    return $arr;
}
  • 插入排序

原理:每步將一個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的文件中適當位置上,直到全部插入完為止。

function insertSort($arr) {
    $len = count($arr);
    for ($i=1;$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;
            }
        }
    }
    return $arr;

}
  •  快速排序

原理:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

function quickSort($arr) {
    $len = count($arr);
    if ($len<=1) {
        return $arr;
    }
    //記錄第一個元素
    $x = $arr[0];
    //記錄小元素集合
    $min = array();
    //記錄大元素集合
    $max = array();
    for ($i=1;$i<$len; $i++) {
        if ($arr[$i]<=$x) {
            $min[] = $arr[$i];
        }
        if ($arr[$i]>$x) {
            $max[] = $arr[$i];
        }

    }
    $min = quickSort($min);
    $max = quickSort($max);
    $result= array_merge($min,array($x),$max);
    return $result;

}
  • 冒泡排序

原理:比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

function bubbleSort($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];
                $arr[$j] = $arr[$j + 1];
                $arr[$j + 1] = $tmp;
            }

        }

    }
    return $arr;
}

 


免責聲明!

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



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