快速排序算法

快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
php代码实现如下:

<?php
class quick_sort
{
    function __construct($arr)
    {
        $this->array_quick_sort($arr);
        $this->output($arr);
    }
    
    private function array_quick_sort(&$arr)
    {
        if(!is_array($arr))
        {
            return FALSE;
        }
        $length = count($arr);
        if($length > 1)
        {
            $k = $arr[0];
            $x = array();
            $y = array();
            for($i=1; $i<$length; $i++)
            {
                if($arr[$i] <= $k)
                {
                    $x[] = $arr[$i];
                }
                elseif($arr[$i] > $k)
                {
                    $y[] = $arr[$i];
                }
            }
            $x = $this->array_quick_sort($x);
            $y = $this->array_quick_sort($y);
            $arr = array_merge($x, array($k), $y);
            return $arr;
        }
        else
        {
          return $arr;
        }
    }
    
    private function output($arr)
    {
        echo iconv('utf-8', 'gbk', "整数序列经快速排序后的结果如下:\n");
        $str = '';
        foreach($arr as $number)
        {
            $str .= $number.', ';
        }    
        echo rtrim($str, ', ')."\n\n";
    }
}

function read()
{
    $input = trim(fgets(STDIN));
    return $input;
}

function test()
{
    $str = '49, 38, 65, 97, 76, 13, 27, 49, 55, 04';
    $arr = explode(', ', $str);
    new quick_sort($arr);
}

function main()
{
    $flag = TRUE;
    while($flag)
    {
        echo iconv('utf-8', 'gbk', "请输入整数序列,以英文半角逗号和空格分隔,例如49, 38, 65(退出请输入exit或quit)\n");
        $str = read();
        if($str == 'exit' || $str == 'quit')
        {
            echo 'Bye';
            break;    
        }
        $arr = explode(', ', $str);
        $validity = TRUE;
        foreach($arr as $number)
        {
            if(!is_numeric($number))
            {
                echo iconv('utf-8', 'gbk', "数字序列输入有误,请重新输入\n");
                $validity = FALSE;
                break;
            }
        }
        if(!$validity)
        {
            continue;    
        }
        new quick_sort($arr);
    }
}

if(!empty($argv[1]) && $argv[1]=='test')
{
    test();    
}
else
{
    main();
}


你可能感兴趣的:(算法,PHP)