冒泡排序算法的运作如下:(从后往前)
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(); }