PHP中的排序算法

1.冒泡排序

冒泡排序法的基本原理就是通過依次比較相鄰的兩個數,將小數放前,大數放後,最大的那個數依次冒出來。

<?php
//冒泡排序
function maopao_sort( $arr){
    $num = count( $arr);
    if( $num <= 0) return false;
    for( $i = 0; $i < $num - 1; $i++){
        for( $j = 0; $j < $num - 1 - $i; $j++){
            if($arr[$j] > $arr[$j+1]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }
        }
    }
    return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( maopao_sort( $test));
?>

該段代碼輸出爲

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 ) 

排序過程

原始數組爲 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)

第一輪排序 Array( [0] => 4 [1] => 2 [2] => 5 [3] => 1 [4] => 11 [5] => 9 [6] => 3 [7] => 14)
第二輪排序 Array( [0] => 2 [1] => 4 [2] => 1 [3] => 5 [4] => 9 [5] => 3 [6] => 11 [7] => 14)
第三輪排序 Array( [0] => 2 [1] => 1 [2] => 4 [3] => 5 [4] => 3 [5] => 9 [6] => 11 [7] => 14)
第四輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 3 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第五輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第六輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)
第七輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)

2.插入排序

插入排序的基本原理就是把數組分成無序和有序2個區域,依次從無序區拿出一個數,放到有序區相應的位置上。

<?php
//插入排序
function charu_sort( $arr){
    $num = count( $arr);
    if( $num <= 0) return false;
    for( $i = 1; $i < $num; $i++){
        $temp = $arr[$i];
        $j = $i - 1;
        while($j >= 0 && $arr[$j] > $temp){
            $arr[$j+1] = $arr[$j];
            $j--;
        }
        $arr[$j+1] = $temp;
    }
    return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( charu_sort( $test));
?>

該段代碼輸出爲

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 ) 

排序過程

原始數組爲 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)

第一輪排序 Array( [0] => 4 [1] => 11 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第二輪排序 Array( [0] => 2 [1] => 4 [2] => 11 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第三輪排序 Array( [0] => 2 [1] => 4 [2] => 5 [3] => 11 [4] => 1 [5] => 14 [6] => 9 [7] => 3)
第四輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第五輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第六輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 9 [5] => 11 [6] => 14 [7] => 3)
第七輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)


3.選擇排序

選擇排序即是每一趟從待排序的數組中選出1個最小的數,順序擺放,一直到選完爲止。

<?php
//選擇排序
function xuanze_sort( $arr){
    $num = count( $arr);
    if( $num <= 0) return false;
    for( $i = 0; $i < $num - 1; $i++){
        $min = $i;
        for($j = $i + 1; $j < $num; $j++){
            if( $arr[$min] > $arr[$j]){
                $min = $j;
            }
        }
        $temp = $arr[$i];
        $arr[$i] = $arr[$min];
        $arr[$min] = $temp;
    }
    return $arr;
}
$test = array(11,4,2,5,1,14,9,3);
print_r( xuanze_sort( $test));
?>

該段代碼輸出爲

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 ) 

排序過程

原始數組爲 Array( [0] => 11 [1] => 4 [2] => 2 [3] => 5 [4] => 1 [5] => 14 [6] => 9 [7] => 3)

第一輪排序 Array( [0] => 1 [1] => 4 [2] => 2 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第二輪排序 Array( [0] => 1 [1] => 2 [2] => 4 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 3)
第三輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 5 [4] => 11 [5] => 14 [6] => 9 [7] => 4)
第四輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 11 [5] => 14 [6] => 9 [7] => 5)
第五輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 14 [6] => 9 [7] => 11)
第六輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 14 [7] => 11)
第七輪排序 Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14)


4.快速排序

快速排序是以第一個元素爲key值,將所有比key小的元素排左邊,所有比key大的元素排右邊。這樣就完成了一趟快速排序,然後將左右2邊的元素,繼續按這樣的方式進行遞歸排序。直到剩下1個元素爲止。

<?php
//選擇排序
function kuaisu_sort( $arr){
    $num = count( $arr);
    if( $num <= 1) return $arr;
    $left_arr = array();
    $right_arr = array();
    $key = $arr[0];
    for( $i = 1; $i < $num; $i++){
        if( $arr[$i] <= $key){
            $left_arr[] = $arr[$i];
        }
        else{
            $right_arr[] = $arr[$i];
        }
    }
    $left_arr = kuaisu_sort( $left_arr);
    $right_arr = kuaisu_sort( $right_arr);
    return array_merge($left_arr, array($key), $right_arr);
}
$test = array(11,4,2,5,1,14,9,3);
print_r( kuaisu_sort( $test));
?>

該段代碼輸出爲

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 9 [6] => 11 [7] => 14 ) 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章