• 技术文章 >php教程 >PHP源码

    快速排序的算法

    PHP中文网PHP中文网2016-05-25 17:15:04原创350
    function qsort(&$arr)
    {
        _quick_sort($arr, 0, count($arr) - 1);
    }
    
    /**
     * 采用递归算法的快速排序。
     *
     * @param array $arr 要排序的数组
     * @param int $low  最低的排序子段
     * @param int $high 最高的排序字段
     */
    function _quick_sort(&$arr, $low, $high)
    {
         $low_data = $arr[$low];
         $prev_low = $low;
         $prev_high = $high;
         while ($low < $high) 
         {
                while ($arr[$high] >= $low_data && $low < $high) {
                    $high--;
                }
                if ($low < $high) {
                    $arr[$low] = $arr[$high];
                    $low++;
                }
                while ($arr[$low] <= $low_data && $low < $high) {
                    $low++;
                }
                if ($low < $high) {
                    $arr[$high] = $arr[$low];
                    $high--;
                }
         }
         $arr[$low] = $low_data;
         if ($prev_low < $low) {
             _quick_sort($arr, $prev_low, $low);
         }
         if ($low + 1 < $prev_high) {
             _quick_sort($arr, $low + 1, $prev_high);
         }
    }
    
    function quick_sort(&$arr)
    {
        $stack = array();
        array_push($stack, 0);
        array_push($stack, count($arr) -1);
        while (!empty($stack)) {
            $high = array_pop($stack);
            $low = array_pop($stack);
            $low_data = $arr[$low];
            $prev_low = $low;
            $prev_high = $high;
            while ($low < $high) 
            {
                while ($arr[$high] >= $low_data && $low < $high) {
                    $high--;
                }
                if ($low < $high) {
                    $arr[$low] = $arr[$high];
                    $low++;
                }
                while ($arr[$low] <= $low_data && $low < $high) {
                    $low++;
                }
                if ($low < $high) {
                    $arr[$high] = $arr[$low];
                    $high--;
                }
            }
            $arr[$low] = $low_data;
            if ($prev_low < $low) {
                array_push($stack, $prev_low);
                array_push($stack, $low);
            }
            if ($low + 1 < $prev_high) {
                array_push($stack, $low + 1);
                array_push($stack, $prev_high);
            }
        }
    }

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:快速排序的算法
    上一篇:PHP_SELF、 SCRIPT_NAME、 REQUEST_URI区别 下一篇:用 int 类型实现 类型 unsinged int 的 右移操作

    相关文章推荐

    • php上传cvs文件完整例子• php学习笔记之面向对象编程• php给图片加水印六• php简单文件上传代码• php面向对象之工厂模式示例

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网