首页 > 代码库 > 常见排序算法(PHP实现)

常见排序算法(PHP实现)

function InsertSort($arr){
    $num  =  count($arr);

    for($i  =  1;  $i  <  $num;  $i++){
        $key  =  $arr[$i];
        for($j  =  $i  -  1;  $j  >=  0;  $j--){
            if($arr[$j]  >  $key){
                $arr[$j  +  1]  =  $arr[$j];
                $arr[$j]  =  $key;
            }
        }
    }
    return $arr;
}

function BubbleSort($arr){
    $num = count($arr);

    for( $i = 1; $i < $num; $i++ ){
        for($j = $num -1; $j >= $i; $j-- ){
            if( $arr[$j] < $arr[$j - 1] ){
                $tmp_val = $arr[$j - 1];
                $arr[$j - 1] = $arr[$j];
                $arr[$j] = $tmp_val;
            }
        }
    }
    return $arr;
}


function BucketSort($arr){
    $bucket = array();

    $idx = 0;

    foreach ($arr as $value) {
        if(!is_int($value)) continue;

        $bucket[$value] = $value;

        if($value > $idx) $idx = $value;
    }

    $rst = array();
    for($i = 0; $i <= $idx; $i++){
        if(isset($bucket[$i])){
            $rst[] = $bucket[$i];
        }
    }

    return $rst;
}

function ExchangeSort($arr){
    $num = count($arr);

    for($i = 0; $i < $num -1; $i++){
        for($j = $i + 1; $j < $num; $j++){
            if($arr[$i] > $arr[$j]){
                $tmp = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j] = $tmp;
            }
        }
    }
    return $arr;
}

function QuickSort($arr){
    $num = count($arr);

    $l_num = $r_num = 0;
    $left = $right = array();

    for($i = 1; $i < $num; $i++){
        if($arr[$i] >= $arr[0]){
            $right[] = $arr[$i];
            $r_num++;
        }else{
            $left[] = $arr[$i];
            $l_num++;
        }
    }

    if($l_num > 1){
        $left = QuickSort($left);
    }

    $left[] = $arr[0];

    if($r_num > 1){
        $right = QuickSort($right);
    }

    for($i = 0; $i < $r_num; $i++){
        $left[] = $right[$i];
    }

    return $left;
}

function PigeonholeSort($arr){
    $pigeonhole = array();

    foreach ($arr as $value) {
        if(!is_int($value)) continue;

        if(isset($pigeonhole[$value]))
            $pigeonhole[$value]++;
        else
            $pigeonhole[$value] = 0;
    }

    $rst = array();

    $i = 0;
    while($pigeonhole[$i]){
        for($j = 0; $j < $pigeonhole[$i]; $j++){
            $rst[] = $i;
        }
        $i++;
    }

    return $rst;
}