冒泡排序算法的运作如下:(从后往前)
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
php代码实现如下:
<?php
class bubble_sort
{
function __construct(&$arr)
{
if(!is_array($arr))
return FALSE;
$cnt=count($arr);
for($i=0; $i<$cnt-1; $i++)
{
for($j=$i+1; $j<$cnt; $j++)
{
if($arr[$j] < $arr[$i])
{
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $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 bubble_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 bubble_sort($arr);
}
}
if(!empty($argv[1]) && $argv[1]=='test')
{
test();
}
else
{
main();
}
转载于:https://blog.51cto.com/hehe1987/1640738