php算法-php实现快速排序算法

本文介绍了一种使用PHP实现的快速排序算法。通过选取数组中的第一个元素作为基准值,并将所有小于该值的元素放到其左侧,大于该值的放到右侧,从而实现数组的快速排序。此外,还详细介绍了递归实现的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 <?php
        /*
         *  快速排序是编程中经常使用到的一种排序方法,作为必须掌握的一种算法,这里将进行php的快速排序实现
         *  快速排序的核心思想就是将一个数组中第一项作为中界,所有比这个数大的放在它的右边,小的放在左边
         *  ,然后对其左边右边递归这个过程。
         */
        main();


        function main() {
            $arr = array(3, 2, 5, 43, 23, 12, 32, 333, 4, 2, 4, 67, 100, 213);
            $len = count($arr);
            quick_sort($arr, $len);
            print_r($arr);
        }


        /*
         * @description 判断传入数据正确并调用自递归函数_quick_sort
         * @params &$arr(整型数组引用),$len(数组长度)
         */


        function quick_sort(&$arr, $len) {
            if (empty($arr) || $len < 1) {
                return;
            }
            _quick_sort($arr, 0, $len - 1);
        }


        /*
         * @description 递归实现快速排序
         * @params &$arr(整型数组引用),$start(数组开始索引值),$start(数组结束索引值)
         */


        function _quick_sort(&$arr, $start, $end) {




            if ($start >= $end)
                return;
            $middle = sort_middle($arr, $start, $end);   
            _quick_sort($arr, $start, $middle - 1); //分割线已左的继续进行排序
            _quick_sort($arr, $middle + 1, $end); //分割线已右的继续进行排序
        }


        /*
         * @description 接受整型数组,将所有比数组第一项小的数组放在左边,大的放在右边,最终数组第一项变成一个分割线,大的右边,小的左边
         * @params &$arr(整型数组引用),$start(数组开始索引值),$start(数组结束索引值)
         * @return int  分割数的位置
         */


        function sort_middle(&$arr, $start, $end) {
//             $debug=debug_backtrace();  echo "<pre>"; print_r($debug); echo "</pre>";


            $loop = $start + 1;
            $tail = $end - $start;
            $head = $start;
            $temp = $arr;
            $mid = $temp[$start];


            while ($loop <= $end) {
                if ($mid > $temp[$loop]) {
                    $arr[$head] = $temp[$loop];
                    $head++;
                } else {
                    $arr[$start + $tail] = $temp[$loop];
                    $tail--;
                }


                $loop++;
            }
            $arr[$head] = $mid;
            return $head;
        }
        ?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值