选择排序算法

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


php代码实现如下:

<?php
class select_sort
{
    function __construct(&$arr)
    {
        if(!is_array($arr))
            return FALSE;
        $count=count($arr);
        for($i=0;$i<$count-1;$i++)
        {
            $min = $i;
            for($j=$i+1; $j<$count; $j++)
            {
                //由小到大排列
                if($arr[$min] > $arr[$j])
                {
                    //表明当前最小的还比当前的元素大
                    $min = $j;
                    //赋值新的最小的
                }
            }
            //将当前内循环的最小元素放在$i位置上
            if($min != $i)
            {
                $temp = $arr[$min];
                $arr[$min] = $arr[$i];
                $arr[$i] = $temp;
            }
        }
        $this->output($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 select_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 select_sort($arr);
    }
}

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

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