快速排序(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(); }