经典排序算法的PHP实现类

PHP的几种常用排序算法 PHP的几种常用排序算法 所谓序,就是对一组数据,按照某个顺序列的过程。 冒泡序(Bubble sort) 基本思想:如下图所示,将一组数据看作一竖着的气泡,然后让最后一个数与倒数第二个数进行比较,大的就往前移。然后用相同的方法,将倒数第二个数与倒数第三个进行比较,大的往前移,依次类推,最后本轮循环结束后,第一个元素就是最大的了,然后继续循环,得到第二个,第三个…… 下面给出实现代码,已经优化过的冒泡序 function BubbleSort(&$arr){ //必须是& 阅读详情

近期广受笔试摧残,对于各种排序也是晕头转向。
更坑爹的是貌似大多都是用C++、Java实现相关算法,让我搞PHP的情何以堪,更何况,PHP本身就有排序函数sort(),其实来说,是很简单的,这也可能是为什么不用PHP进行排序吧。
但考虑到PHP毕竟也是一门面向对象的语言吧,我们利用原生的语法,也是可以实现经典排序算法的,先不说性能如何,切不要妄自菲薄吧。
下面为具体的经典排序算法的PHP实现类。

<?php

/**
 * Author: helen
 * CreateTime: 2016/4/15 23:12
 * description: PHP--排序函数(数组排序)
 */
class SORT
{
    //属性值:存储传入的数组
    protected $array = array();
    //属性值:数组长度
    protected $length;

    /*
     * SORT类初始化函数
     * @access public
     * @param array $array 传入的需要进行排序的函数
     * @return object $this 对象本身
     * */
    public function __construct(array $array)
    {
        $this->array = $array;
        $this->length = count($array);
        return $this;
    }

    /*
     * 冒泡排序
     * 算法思想:两两比较相邻元素(记录)的关键字,如果反序则交换,直到没有反序的元素(记录)为止
     * 复杂度:时间复杂度:o(n*n)
     * 辅助空间:o(1)
     * 稳定性:稳定
     * @access public
     * @param string $type 排列顺序:升序asc,降序desc;默认升序asc
     * @return array $array 排序完成的数组
     * @return string $exchange_count 排序过程中交换的次数
     * @return string $compare_count 排序过程中比较的次数
     * */
    public function BubbleSort($type = 'asc')
    {
        $array = $this->array;
        $length = $this->length;
        $exchange_count = 0;      //交换次数
        $compare_count = 0;       //比较次数
        $flag = true;             //标记,目的在于减少比较次数
        switch ($type) {
            case 'asc':     //升序排列
                for ($i = 0; $i < $length && $flag; $i++) {      //若flag为true则退出循环
                    $flag = false;
                    for ($j = $length - 2; $j > $i; $j--) {
                        if ($array[$j] > $array[$j + 1]) {
                            $tmp = $array[$j];
                            $array[$j] = $array[$j + 1];
                            $array[$j + 1] = $tmp;
                            $exchange_count++;
                            $flag = true;   //如果有数据交换,则flag为true
                        }
                        $compare_count++;
                    }
                }
                break;
            case 'desc':    //降序排列
                for ($i = 0; $i < $length && $flag; $i++) {          //若flag为true则退出循环
                    $flag = false;
                    for ($j = $length - 2; $j >= $i; $j--) {
                        if ($array[$j] < $array[$j + 1]) {
                            $tmp = $array[$j];
                            $array[$j] = $array[$j + 1];
                            $array[$j + 1] = $tmp;
                            $exchange_count++;
                            $flag = true;   //如果有数据交换,则flag为true
                        }
                        $compare_count++;
                    }
                }
                break;
        }
        return array(
            'array' => $array,
            'exchange_count' => $exchange_count,
            'compare_count' => $compare_count
        );
    }

    /*
     * 简单选择排序
     * 算法思想:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的元素(记录),并和第i(1=<i<=n)个元素(记录)交换之
     * 复杂度:o(n*n)
     * 辅助空间:o(1)
     * 稳定性:稳定
     * @access public
     * @param string $type 排列顺序:升序asc,降序desc;默认升序asc
     * @return array $array 排序完成的数组
     * @return string $exchange_count 排序过程中交换的次数
     * @return string $compare_count 排序过程中比较的次数
     * */
    public function SelectSort($type = 'asc')
    {
        $array = $this->array;
        $length = $this->length;
        $exchange_count = 0;      //交换次数
        $compare_count = 0;       //比较次数
        switch ($type) {
            case 'asc':
                for ($i = 0; $i < $length; $i++) {
                    $min = $i;          //将当前下标定义为最小值下标
                    for ($j = $i + 1; $j < $length; $j++) {   //循环之后的数据
                        if ($array[$min] > $array[$j]) {    //如果有小于当前最小值的关键字
                            $min = $j;                  //将此关键字的下标赋值给min
                        }
                        $compare_count++;
                    }
                    if ($i != $min) {       //若min不等于i,说明找到最小值,交换
                        $tmp = $array[$min];
                        $array[$min] = $array[$i];
                        $array[$i] = $tmp;
                        $exchange_count++;
                    }
                }
                break;
            case 'desc':
                for ($i = 0; $i < $length; $i++) {
                    $max = $i;          //将当前下标定义为最大值下标
                    for ($j = $i + 1; $j < $length; $j++) {   //循环之后的数据
                        if ($array[$max] < $array[$j]) {    //如果有大于当前最da值的关键字
                            $max = $j;                  //将此关键字的下标赋值给max
                        }
                        $compare_count++;
                    }
                    if ($i != $max) {       //若min不等于i,说明找到最大值,交换
                        $tmp = $array[$max];
                        $array[$max] = $array[$i];
                        $array[$i] = $tmp;
                        $exchange_count++;
                    }
                }
                break;
        }
        return array(
            'array' => $array,
            'exchange_count' => $exchange_count,
            'compare_count' => $compare_count
        );
    }

    /*
     * 直接插入排序
     * 算法思想:将一个元素(记录)插入到已经排好序的有序表中,从而得到一个新的,元素(记录)数增1的有序表
     * 复杂度:o(n*n)
     * 辅助空间:o(1)
     * 稳定性:稳定
     * @access public
     * @param string $type 排列顺序:升序asc,降序desc;默认升序asc
     * @return array $array 排序完成的数组
     * @return string $exchange_count 排序过程中交换的次数
     * @return string $compare_count 排序过程中比较的次数
     * */
    public function InsertSort($type = 'asc')
    {
        $array = $this->array;
        $length = $this->length;
        $exchange_count = 0;      //交换次数
        $compare_count = 0;       //比较次数
        switch ($type) {
            case 'asc':
                for ($i = 1; $i < $length; $i++) {
                    if ($array[$i] < $array[$i - 1]) {    //须将$array[$i]插入有序子表
                        $flag = $array[$i];     //设置哨兵
                        for ($j = $i - 1; $array[$j] > $flag && $j >= 0; $j--) {
                            $array[$j + 1] = $array[$j];    //记录后移
                            $compare_count++;
                        }
                        $array[$j + 1] = $flag;   //插入到正确位置
                        $exchange_count++;
                    }
                }
                break;
            case 'desc':
                for ($i = 1; $i < $length; $i++) {
                    if ($array[$i] > $array[$i - 1]) {    //须将$array[$i]插入有序子表
                        $flag = $array[$i];     //设置哨兵
                        for ($j = $i - 1; $array[$j] < $flag && $j >= 0; $j--) {
                            $array[$j + 1] = $array[$j];    //记录后移
                            $compare_count++;
                        }
                        $array[$j + 1] = $flag;   //插入到正确位置
                        $exchange_count++;
                    }
                }
                break;
        }
        return array(
            'array' => $array,
            'exchange_count' => $exchange_count,
            'compare_count' => $compare_count
        );
    }

    /*
     * 希尔排序
     * 算法思想:序列分割--基本有序,然后进行直接插入排序。将相距某个增量的元素(记录)组成一个子序列,保证在子序列中分别进行直接插入排序后得到的结果是基本有序(小的关键字基本在前面,大的关键字基本在后面)
     * 复杂度:o(n*logn)~o(n*n)
     * 辅助空间:o(1)
     * 稳定性:不稳定
     * @access public
     * @param string $type 排列顺序:升序asc,降序desc;默认升序asc
     * @return array $array 排序完成的数组
     * @return string $exchange_count 排序过程中交换的次数
     * @return string $compare_count 排序过程中比较的次数
     * */
    public function ShellSort($type = 'asc')
    {
        $array = $this->array;
        $length = $this->length;
        $exchange_count = 0;      //交换次数
        $compare_count = 0;       //比较次数
        switch ($type) {
            case 'asc':
                for ($gap = $length >> 1; $gap > 0; $gap >>= 1) {
                    for ($i = $gap; $i < $length; $i++) {
                        $temp = $array[$i];
                        for ($j = $i - $gap; $j >= 0 && $array[$j] > $temp; $j -= $gap) {
                            $array[$j + $gap] = $array[$j];
                            $compare_count++;
                        }
                        $array[$j + $gap] = $temp;
                        $exchange_count++;
                    }
                }
                break;
            case 'desc':
                for ($gap = $length >> 1; $gap > 0; $gap >>= 1) {
                    for ($i = $gap; $i < $length; $i++) {
                        $temp = $array[$i];
                        for ($j = $i - $gap; $j >= 0 && $array[$j] < $temp; $j -= $gap) {
                            $array[$j + $gap] = $array[$j];
                            $compare_count++;
                        }
                        $array[$j + $gap] = $temp;
                        $exchange_count++;
                    }
                }
                break;
        }
        return array(
            'array' => $array,
            'exchange_count' => $exchange_count,
            'compare_count' => $compare_count
        );
    }

    /*
     * 堆排序
     * 算法思想:将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根节点。将它移走,然后将剩余元素重新构造成一个堆,再移走根节点,以此类推。
     * 复杂度:o(n*logn)
     * 辅助空间:o(1)
     * 稳定性:不稳定
     * @access public
     * @param string $type 排列顺序:升序asc,降序desc;默认升序asc
     * @return array $array 排序完成的数组
     * @return string $exchange_count 排序过程中交换的次数
     * @return string $compare_count 排序过程中比较的次数
     * */
    public function HeapSort($type = 'asc')
    {
        $array = $this->array;
        $length = $this->length;
        $exchange_count = 0;      //交换次数
        $compare_count = 0;       //比较次数
        switch ($type) {
            case 'asc':
                $array = self::heap_sort_asc($array);
                break;
            case 'desc':
                $array = self::heap_sort_desc($array);
                break;
        }
        return array(
            'array' => $array,
            'exchange_count' => $exchange_count,
            'compare_count' => $compare_count
        );
    }

    protected function swap(&$x, &$y)
    {
        $t = $x;
        $x = $y;
        $y = $t;
    }

    protected function max_heapify_asc(&$arr, $start, $end)
    {
        //建立父節點指標和子節點指標
        $dad = $start;
        $son = $dad * 2 + 1;
        if ($son >= $end)//若子節點指標超過範圍直接跳出函數
            return;
        if ($son + 1 < $end && $arr[$son] < $arr[$son + 1])//先比較兩個子節點大小,選擇最大的
            $son++;
        if ($arr[$dad] <= $arr[$son]) {//如果父節點小於子節點時,交換父子內容再繼續子節點和孫節點比較
            self::swap($arr[$dad], $arr[$son]);
            self::max_heapify_asc($arr, $son, $end);
        }
    }

    protected function heap_sort_asc($arr)
    {
        $len = count($arr);
        //初始化,i從最後一個父節點開始調整
        for ($i = $len / 2 - 1; $i >= 0; $i--)
            self::max_heapify_asc($arr, $i, $len);
        //先將第一個元素和已排好元素前一位做交換,再從新調整,直到排序完畢
        for ($i = $len - 1; $i > 0; $i--) {
            self::swap($arr[0], $arr[$i]);
            self::max_heapify_asc($arr, 0, $i);
        }
        return $arr;
    }

    protected function max_heapify_desc(&$arr, $start, $end)
    {
        //建立父節點指標和子節點指標
        $dad = $start;
        $son = $dad * 2 + 1;
        if ($son >= $end)//若子節點指標超過範圍直接跳出函數
            return;
        if ($son + 1 < $end && $arr[$son] > $arr[$son + 1])//先比較兩個子節點大小,選擇最大的
            $son++;
        if ($arr[$dad] >= $arr[$son]) {//如果父節點小於子節點時,交換父子內容再繼續子節點和孫節點比較
            self::swap($arr[$dad], $arr[$son]);
            self::max_heapify_desc($arr, $son, $end);
        }
    }

    protected function heap_sort_desc($arr)
    {
        $len = count($arr);
        //初始化,i從最後一個父節點開始調整
        for ($i = $len / 2 - 1; $i >= 0; $i--)
            self::max_heapify_desc($arr, $i, $len);
        //先將第一個元素和已排好元素前一位做交換,再從新調整,直到排序完畢
        for ($i = $len - 1; $i > 0; $i--) {
            self::swap($arr[0], $arr[$i]);
            self::max_heapify_desc($arr, 0, $i);
        }
        return $arr;
    }

    /*
     * 归并排序
     * 算法思想:假设初始具有n个元素,每个子序列的长度为2,然后两两归并,得到下一个子序列,继续两两归并,以此类推。
     * 复杂度:o(n*logn)
     * 辅助空间:o(n)
     * 稳定性:稳定
     * @access public
     * @param string $type 排列顺序:升序asc,降序desc;默认升序asc
     * @return array $array 排序完成的数组
     * @return string $exchange_count 排序过程中交换的次数
     * @return string $compare_count 排序过程中比较的次数
     * */
    public function MergeSort($type = 'asc')
    {
        $array = $this->array;
        $length = $this->length;
        $exchange_count = 0;      //交换次数
        $compare_count = 0;       //比较次数
        switch ($type) {
            case 'asc':
                $array = self::merge_sort_asc($array);
                break;
            case 'desc':
                $array = self::merge_sort_desc($array);
                break;
        }
        return array(
            'array' => $array,
            'exchange_count' => $exchange_count,
            'compare_count' => $compare_count
        );
    }

    protected function merge_sort_asc($arr)
    {
        $len = count($arr);
        if ($len <= 1) {
            return $arr;
        } else {
            $half = ($len >> 1) + ($len & 1);
            $arr2d = array_chunk($arr, $half);
            $left = self::merge_sort_asc($arr2d[0]);
            $right = self::merge_sort_asc($arr2d[1]);
            while (count($left) && count($right)) {
                if ($left[0] < $right[0]) {
                    $reg[] = array_shift($left);
                } else {
                    $reg[] = array_shift($right);
                }
            }
        }
        return array_merge($reg, $left, $right);
    }

    protected function merge_sort_desc($arr)
    {
        $len = count($arr);
        if ($len <= 1) {
            return $arr;
        } else {
            $half = ($len >> 1) + ($len & 1);
            $arr2d = array_chunk($arr, $half);
            $left = self::merge_sort_desc($arr2d[0]);
            $right = self::merge_sort_desc($arr2d[1]);
            while (count($left) && count($right)) {
                if ($left[0] > $right[0]) {
                    $reg[] = array_shift($left);
                } else {
                    $reg[] = array_shift($right);
                }
            }
        }
        return array_merge($reg, $left, $right);
    }

    /*
     * 快速排序
     * 算法思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可对这两部分记录继续进行排序,以达到整个序列有序的目的。
     * 复杂度:o(n*logn)
     * 辅助空间:o(logn)~o(n)
     * 稳定性:不稳定
     * @access public
     * @param string $type 排列顺序:升序asc,降序desc;默认升序asc
     * @return array $array 排序完成的数组
     * @return string $exchange_count 排序过程中交换的次数
     * @return string $compare_count 排序过程中比较的次数
     * */
    public function QuickSort($type = 'asc')
    {
        $array = $this->array;
        $length = $this->length;
        static $exchange_count = 0;      //交换次数
        static $compare_count = 0;       //比较次数
        switch ($type) {
            case 'asc':
                $array = self::quick_sort_asc($array);
                break;
            case 'desc':
                $array = self::quick_sort_desc($array);
                break;
        }
        return array(
            'array' => $array,
            'exchange_count' => $exchange_count,
            'compare_count' => $compare_count
        );
    }

    protected function quick_sort_asc($arr)
    {
        $len = count($arr);
        static $compare_count = 0;       //比较次数
        if ($len <= 1) {
            return $arr;
        } else {
            $left = $right = array();
            $mid_value = $arr[0];
            for ($i = 1; $i < $len; $i++) {
                if ($arr[$i] < $mid_value) {
                    $left[] = $arr[$i];
                } else {
                    $right[] = $arr[$i];
                }
                $compare_count++;
            }
        }
        return array_merge(self::quick_sort_asc($left), (array)$mid_value, self::quick_sort_asc($right));
    }

    protected function quick_sort_desc($arr)
    {
        $len = count($arr);
        static $compare_count = 0;       //比较次数
        if ($len <= 1) {
            return $arr;
        } else {
            $left = $right = array();
            $mid_value = $arr[0];
            for ($i = 1; $i < $len; $i++) {
                if ($arr[$i] > $mid_value) {
                    $left[] = $arr[$i];
                } else {
                    $right[] = $arr[$i];
                }
                $compare_count++;
            }
        }
        return array_merge(self::quick_sort_desc($left), (array)$mid_value, self::quick_sort_desc($right));
    }
    /*
     * 排序算法中数组元素交换函数
     * @access protected
     * @param array $array 需要元素交换的数组
     * @param interger $i 需要元素交换的数组下标
     * @param interger $j 需要元素交换的数组下标
     * @return void
     * */
    /*protected function swap(array $array, $i, $j)
    {
        $tmp = $array[$i];
        $array[$i] = $array[$j];
        $array[$j] = $tmp;
    }*/
}

使用示例:(在TP框架下,所以输出均用了dump()函数)

    include '/classes/sort.php';
    $arr = array(1,5,4,2,9,7,8,6,16,13,14,17);
    $arr = new \SORT($arr);
    echo '<h2>冒泡排序结果:</h2>';
    echo '<h4>升序:</h4>';
    $bubble_sort_asc = $arr->BubbleSort('asc');
    dump($bubble_sort_asc);
    echo '<h4>降序:</h4>';
    $bubble_sort_desc = $arr->BubbleSort('desc');
    dump($bubble_sort_desc);
    echo '<h2>选择排序结果:</h2>';
    echo '<h4>升序:</h4>';
    $select_sort_asc = $arr->SelectSort('asc');
    dump($select_sort_asc);
    echo '<h4>降序:</h4>';
    $select_sort_desc = $arr->SelectSort('desc');
    dump($select_sort_desc);
    echo '<h2>插入排序结果:</h2>';
    echo '<h4>升序:</h4>';
    $insert_sort_asc = $arr->InsertSort('asc');
    dump($insert_sort_asc);
    echo '<h4>降序:</h4>';
    $insert_sort_desc = $arr->InsertSort('desc');
    dump($insert_sort_desc);
    echo '<h2>希尔排序结果:</h2>';
    echo '<h4>升序:</h4>';
    $shell_sort_asc = $arr->ShellSort('asc');
    dump($shell_sort_asc);
    echo '<h4>降序:</h4>';
    $shell_sort_desc = $arr->ShellSort('desc');
    dump($shell_sort_desc);
    echo '<h2>堆排序结果:</h2>';
    echo '<h4>升序:</h4>';
    $heap_sort_asc = $arr->HeapSort('asc');
    dump($heap_sort_asc);
    echo '<h4>降序:</h4>';
    $heap_sort_desc = $arr->HeapSort('desc');
    dump($heap_sort_desc);
    echo '<h2>归并排序结果:</h2>';
    echo '<h4>升序:</h4>';
    $merge_sort_asc = $arr->MergeSort('asc');
    dump($merge_sort_asc);
    echo '<h4>降序:</h4>';
    $merge_sort_desc = $arr->MergeSort('desc');
    dump($merge_sort_desc);
    echo '<h2>快速排序结果:</h2>';
    echo '<h4>升序:</h4>';
    $quick_sort_asc = $arr->QuickSort('asc');
    dump($quick_sort_asc);
    echo '<h4>降序:</h4>';
    $quick_sort_desc = $arr->QuickSort('desc');
    dump($quick_sort_desc);

此为第一版,后续还会更新补充。
对于后续三种推排序、归并排序、快速排序,我也还是有点小困惑的。

php简单的算法 简单的php面向对象算法类文件,需要的朋友可以下载下来了解,序可以自定义 立即下载

相关推荐

子集和PHP算法

子集和暴力回溯求解,适合浮点、整数求解,返回二维数组,使用小批量数据,慎用

php三种序,PHP几种排序算法

class bevin{public $public = 'public';private $private = 'private';protected $protected = 'protected';//final $final = 'final';static $static = 'static';function __construct(){$this->protected = 'c...

weixin_32259717的博客 144

PHP Class&Object -- PHP序二叉树的深入解析

本篇文章是对PHP中的自序二叉树进行了详细的分析介绍,需要的朋友参考下

php 按照类属性序,在PHP中按对象属性序数组?

问题是关于使用usort的低效率,因为调用比较回调的开销。这个答案看看使用内置序函数和非递归quicksort实现之间的区别。答案随着PHP自2009年以来的演变而变化,所以我保持更新。旧的材料,虽然不再相关,但仍然有趣!TL; DR:as of php 7.0.1,非递归快速排序不再比使用带有回调的usort快。这并不总是这样,这就是为什么下面的细节使有趣的阅读。真正的好处是,如果你基准你的问...

weixin_39629188的博客 194

四种排序算法PHP实现类

四种排序算法PHP实现: 1) 插入序(Insertion Sort)的基本思想是:  每次将一个待序的记录,按其关键字大小插入到前面已经好序的子文件中的适当位置,直到全部记录插入完成为止。 2) 选择序(Selection Sort)的基本思想是:  每一趟从待序的记录中选出关键字最小的记录,顺序放在已好序的子文件的最后,直到全部记录序完毕。 3) 冒泡序的基

hello_katty的专栏 1547

PHP实现十大经典排序算法

算法概述 01、算法分类: 十种常见排序算法可以分为两大类: 非线性时间比较类序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类序。 线性时间非比较类序:不通过比较来决定元素间的相对次序,它可以突破基于比较序的时间下界,以线性时间运行,因此称为线性时间非比较类序。   02、算法复杂度 03、相关概念 ...

绝世小逗比 1143

php 实现类,四种排序算法PHP实现类

四种排序算法PHP实现: 1) 插入序(Insertion Sort)的基本思想是: 每次将一个待序的记录,按其关键字大小插入到前面已经好序的子文件中的适当位置,直到全部记录插入完成为止。 2) 选择序(Selection Sort)的基本思想是: 每一趟从待序的记录中选出关键字最小的记录,顺序放在已好序的子文件的最后,直到全部记录序完毕。 3) 冒泡序的基本思想是: 两两比...

weixin_39708557的博客 116

PHP实现经典的5种排序算法

排序算法是一种将一组无序的数据元素按照某个规则(大小、字母序等)列成有序的序列的算法。常见的排序算法包括冒泡序、选择序、插入序、快速排序、归并序等。1.冒泡序:比较相邻元素的大小,如果前面比后面大,则交换两个元素。通过多轮扫描,最大的元素被交换到了最后一位。2.选择序:每次选取当前未序部分中最小的元素,放到已序部分的末尾。3.插入序:将未序部分逐个插入到已序部分中的正确位置,使得已序部分一直有序。

黑夜开发者的博客 2663

php 实现十大经典排序算法

1、直接插入序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 /* * 直接插入序,插入序的思想是:当前插入位置之前的元素有序, * 若插入当前位置的元素比有序元素最后一个元素大,则什么也不做, * 否...

weixin_46742102的博客 644

十大经典排序算法解析及优化

在上篇文章《十大经典排序算法(动图演示)》中,已经能够了解各种排序算法的思想逻辑,虽然其中提供了代码,但对其解析却并不够全面,而且使用的是js来进行编写演示。本人根据其上代码转换为PHP,并对其代码进行深入解析,并提供相应的优化方法/思路。因此,本文中重点看的不是内容不是代码,而是代码注释。希望能够帮助大家更好地理解各排序算法的编码思路,掌握算法的各种基本方法。

Millionmile的博客 1745

十大经典排序算法——快速排序 (Java、JavaScript、PHP、Python、Go语言实现

十大经典排序算法之——快速排序 本文主要介绍十大经典排序算法中的“快速排序”,并附上插入排序算法的Java、JavaScript、PHP、Python、Go语言实现。 1、十大经典排序算法介绍 排序算法可以分为内部序和外部序,内部序是数据记录在内存中进行序,而外部序是因序的数据很大,一次不能容纳全部的序记录,在序过程中需要访问外存。常见的内部排序算法有:插入序、希尔序、选择...

菜鸟的后花园 716

十大经典排序算法——桶序 (Java、JavaScript、PHP语言实现

十大经典排序算法之——桶序 本文主要介绍十大经典排序算法中的“桶序”,并附上桶排序算法的Java、JavaScript、PHP语言实现。 1、十大经典排序算法介绍 排序算法可以分为内部序和外部序,内部序是数据记录在内存中进行序,而外部序是因序的数据很大,一次不能容纳全部的序记录,在序过程中需要访问外存。常见的内部排序算法有:插入序、希尔序、选择序、冒泡序、归并序、...

菜鸟的后花园 742

十大经典排序算法——基数序 (Java、JavaScript、PHP语言实现

十大经典排序算法之——基数序 本文主要介绍十大经典排序算法中的“基数序”,并附上基数排序算法的Java、JavaScript、PHP语言实现。 1、十大经典排序算法介绍 排序算法可以分为内部序和外部序,内部序是数据记录在内存中进行序,而外部序是因序的数据很大,一次不能容纳全部的序记录,在序过程中需要访问外存。常见的内部排序算法有:插入序、希尔序、选择序、冒泡序、归并...

菜鸟的后花园 476

php经典排序算法,PHP中四大经典排序算法

1、冒泡序在要序的一组数中,对当前还未好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的序与序要求相反时,就将它们互换。// 升序 $arr=[1,43,54,62,21,66,32,78,36,76,39]; function bubbleSort($arr) { $len=count($arr); //该...

weixin_42500789的博客 216

php 参数序 计算sign_php 经典排序算法(解析)

介绍三种排序算法快速排序选择序冒泡序选择序选择序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待序的数据元素完。 选择序是不稳定的序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。简单解释首先默认序列的第一个元素为最小...

weixin_34405261的博客 447

php实现经典排序算法汇总

php经典排序算法,性能 : 快速排序 > 选择序 > 冒泡序 > 直接序。

清风朗月的博客 301

PHP 经典排序算法

/* * php 四种排序算法的时间与内置的sort序比较 * 3000个元素,四种算法序所用的时间比较 * 冒泡序 857.98192024231ms * 选择序 903.74493598938ms * 插入序 296.8270778656ms * 快速排序 15.607833862305ms * sort序 0.95200538635254ms * 归并序 14...

Bel_Ami_n的博客 311

php算法复杂度,php的几个经典排序算法及时间复杂度和耗时​

php排序算法php的基础,而算法又是区分一个程序员水平高低的重要指标,这里总结了php比较经典的几个排序算法及测试各自的耗时,及其时间复杂度。我首先想到的排序算法是这样的,那数组中的第一个数去跟其他元素比较,遇到比他小的元素即交换,然后继续比较,一个轮询下来确定第一位就是最小的,然后比较第二个元素,(我给他取名叫一般序法),代码如下functionnormal($arr,$length){...

weixin_35410099的博客 288
上一篇: Github上的PHP资源汇总
下一篇: MySQL数据库操作类(PHP实现,支持连贯操作)
helencoder
博客等级 码龄11年 43粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值