常用排序算法PHP最精确写法

常用排序算法,如 冒泡排序,选择排序,直接插入排序,快速排序。他们的时间复杂度分别为:
冒泡:O(n)-O(n^2)
选择:O(n)
插入:O(n)-O(n^2)
快排:O(nlog(n))-O(n)
下面是代码描述(PHP)

<?php
    class SortArray{
    //冒泡排序
    public function bubbleSort2(&$array) {
        $count=count($array);
        $flag=true;//标示符
        if($count<=0) {
            return false;
        }
        for($i=0;$i<$count&&$flag;$i++) {
            for($j=$count-1;$j>$i;$j--) {
                $flag=false;
                if($array[$j]<$array[$j-1]) {
                    $tmp=$array[$j];
                    $array[$j]=$array[$j-1];
                    $array[$j-1]=$tmp;

                    $flag=true;
                }
            }
        }
        return $array;
    }

//    选择排序
public function selectSort(&$array) {
    $len=count($array);

    for($i=0;$i<$len;$i++) {

        $p=$i;
        for($j=$i+1;$j<$len;$j++) {
            if($array[$j]<$array[$p]) {
                $p=$j;
            }
        }
        //
        if($p!=$i) {
            $tmp=$array[$p];
            $array[$p]=$array[$i];
            $array[$i]=$tmp;
        }
    }

    return $array;
}
//插入排序
function insert_sort(&$array) {
    $len=count($array);
    for($i=1;$i<$len;$i++){
        $tmp=$array[$i];
        for($j=$i-1;$j>=0;$j--){
            if($tmp<$array[$j]) {
                $array[$j+1]=$array[$j];
            }else {
                break;
            }
        }
        $array[$j+1]=$tmp;
    }

    return $array;
}

//快排
function quick_sort(&$array,$start,$end){
    $low=$start;
    $high=$end;
    //
    if($low<$high) {
        $val=$array[$low];
        while($low<$high) {
            while($low<$high&&$array[$high]>=$val)
                --$high;
            $array[$low]=$array[$high];
            while($low<$high&&$array[$low]<=$val)
                ++$low;
            $array[$high]=$array[$low];
        }
        $array[$low]=$val;
        //
        $this->quick_sort($array,$start,$low-1);

        $this->quick_sort($array,$low+1,$end);

    }
    return $array;
}
    }
?>

上面的排序方法,调用时都是用的引用&,这样节省空间。
下面是给出的一个测试用例:

<?php
    include "sort.php";

    $mysort=new SortArray();
    $arr=array(3,1,7,5,9,10,2,8);
    //原数据
    print_r($arr);
    //冒泡排序
    $sorted_arr=$mysort->bubbleSort($arr);
    print_r($sorted_arr);

    //选择排序
    $sorted_arr=$mysort->selectSort($arr);
    print_r($sorted_arr);

    //插入排序
    $sorted_arr=$mysort->insert_sort($arr);
    print_r($sorted_arr);

    //快排
    $sorted_arr=$mysort->quick_sort($arr,0,count($arr)-1);
    print_r($sorted_arr);
?>
点赞