Code前端首页关于Code前端联系我们

PHP实现四种常见的排序算法

terry 2年前 (2023-09-27) 阅读数 118 #数据结构与算法

在工作中,我们经常会使用MySQL的order by方法来对数据进行排序,但是还是有很多开发场景无法通过MySQL排序来获取数据,不得不自己开发。今天我们就重点讲解一下四种常见的排序算法。

1。冒泡排序这应该是最熟悉的排序了,而且它的实现也比较简单。通过两两比较,我们得到每轮循环中的最大值或最小值

<?php

//冒泡排序,降序
function maopaoSort(array $data)
{
    $len = count($data);
    for ($i=0;$i<$len;$i++){
        for ($j=0;$j<$len-$i-1;$j++){
            if($data[$j]<$data[$j+1]){
                $tem = $data[$j];
                $data[$j] = $data[$j+1];
                $data[$j+1] = $tem;
            }
        }
    }
    return $data;
}

print_r(maopaoSort([0,435,123,54323,54621,543,321,56,231,54,455,977]));

注:第二级循环中$j的最大值是由d'Number计算得到的数组长度 - 1 -周期 ($ i)2。选择排序

选择一个值作为比较对象,然后用其他值与比较对象进行比较,然后根据比较结果改变位置。循环数据后,即可得到想要的结果

<?php

//选择排序,降序
function selectSort(array $data)
{
    $len = count($data);
    for ($i=0;$i<$len;$i++){
        $selectVal = $data[$i];
        $selectKey = $i;
        for ($j=$i+1;$j<$len;$j++){
            //如果想要升序,只需要把【<】改为【>】即可
            if($selectVal>$data[$j]){
                $selectVal = $data[$j];
                $selectKey = $j;
            }
        }
        $tem = $data[$i];
        $data[$i] = $selectVal;
        $data[$selectKey] = $tem;
    }
    return $data;
}

print_r(selectSort([0,435,123,54323,54621,543,321,56,231,54,455,977]));
3。快速排序选择一个比较值,将数组的值与选择的值进行比较,将数组拆分为左右两组数据
<?php

//快速排序,降序
function fastSort(array $data)
{
    $len = count($data);
    //如果数组中只有一个元素,直接返回
    if($len<=1) return $data;
    //选择一个元素作为比较对象
    $base = $data[0];
    $leftData = array();
    $rightData = array();
    for ($i=1;$i<$len;$i++){
        //降序时左边的存储比较大的值,如果想要升序,左边的数组存储比较小的值
        if($base<$data[$i]){
            $leftData[] = $data[$i];
        }else{
            $rightData[] = $data[$i];
        }
    }
    //使用递归再次处理左右两边的数组
    $leftData = fastSort($leftData);
    $rightData = fastSort($rightData);
    //注意顺序,一定是$leftData为第一个参数,$rightData为第三个参数
    return array_merge($leftData,[$base],$rightData);
}

4。插入排序工作原理:首先,我们假设之前的数据都是已排好序的数据。现在我们把第N个数据排成排序顺序

<?php

//插入排序,降序
function insertSort(array $data)
{
    $len = count($data);
    for ($i=1;$i<$len;$i++){
        $tmp = $data[$i];
        for ($j=$i-1; $j>0; $j--){
            //如果想要升序,只需要把【<】改为【>】即可
            if($data[$j]<$tmp){
                $data[$j+1] = $data[$j];
                $data[$j] = $tmp;
            }
        }
    }
    return $data;
}

除了上面四种排序之外,还有希尔排序、堆排序和归并排序。这几种排序都比较复杂,有兴趣的可以自己实现一下。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门