PHP四种基本排序算法

<?php
/*
 *冒泡排序
 *两两比较相邻元素的大小,发现次序相反即进行交换
 */
function bubbleSort($arr){
    $count = count($arr);
    if($count <= 0){
        return false;
    }
    for($i=0; $i<$count; $i++){
        for($j=$count-1; $j>$i; $j--){
            if($arr[$j] < $arr[$j-1]){
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j-1];
                $arr[$j-1] = $tmp;
            }
        }
    }
    return $arr;
}

/*
 *选择排序
 *每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
 */
function selectSort($arr){
    if(!is_array($arr) || count($arr) == 0){
        return false;
    }
    $count = count($arr);
    for($i=0; $i<$count; $i++){
        $k = $i;
        for($j=$i+1; $j<$count; $j++){
            if($arr[$k] > $arr[$j]){
                $k = $j;
            }
        }
        if($k != $i){
            $tmp = $arr[$i];
            $arr[$i] = $arr[$k];
            $arr[$k] = $tmp;
        }
    }
    return $arr;
}

/*
 *插入排序
 *在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
 */
function insertSort($arr){
    $count = count($arr);
    if(!is_array($arr) || $count == 0){
        return $arr;
    }
    for($i=1; $i<$count; $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){
    if(count($arr) <= 1){
        return $arr;
    }
    $key = $arr[0];
    $left_arr = array();
    $right_arr = array();
    for($i=1; $i<count($arr); $i++){
        if($arr[$i] <= $key){
            $left_arr[] = $arr[$i];
        }else{
            $right_arr[] = $arr[$i];
        }
    }
    $left_arr = quickSort($left_arr);
    $right_arr = quickSort($right_arr);
    return array_merge($left_arr, array($key), $right_arr);
}
?>
原文地址:https://www.cnblogs.com/hell0x/p/5318648.html