快速排序--PHP版本
<?php error_reporting ( 'E_ALL' ); /* * 快排 */ function qSort(&$arr, $left, $right) { if ($left < $right) { // $position = patition ( $arr, $left, $right ); $position = wPatition ( $arr, $left, $right ); qSort ( $arr, $left, $position - 1 ); qSort ( $arr, $position + 1, $right ); } } /* * 分治(for) */ function patition(&$arr, $left, $right) { static $count = 0; // 分治次数 $count ++; while ( $left < $right ) { $key = $arr [$left]; // 以 $left 为标志位 $temp = $arr; // 从右往左 找小值 for(; $right > $left; $right --) { if ($key > $arr [$right]) { // 找到 比 $key 标志值 小的值,准备交换这个小值 到 标志位 位置 break; } } $arr [$left] = $arr [$right]; // 交换这个小值 到 标志位 位置 $temp [$left] = "<b><font color='red'>{$arr[$left]}</font></b>"; // 从左往右 找大值 for(; $left < $right; $left ++) { if ($key < $arr [$left]) { break; } } $arr [$right] = $arr [$left]; // 交换大值到 小值的位置上 $arr [$left] = $key; $temp [$right] = "<b><font color='purple'>{$arr[$right]}</font></b>"; $temp [$left] = "<b><font color='blue'>{$arr[$left]}</font></b>"; echo "<b>第{$count}次分治,关键字[$key]:</b>" . implode ( "\t", $temp ) . '<br />'; unset ( $temp ); } return $left; } /* * 分治(while) */ function wPatition(&$arr, $left, $right) { $key = $arr [$left]; while ( $left < $right ) { while ($left<$right && $key < $arr [$right] ) { $right --; } if ($left<$right) { $arr [$left] = $arr [$right]; $left ++; } while ($left<$right && $key > $arr [$left] ) { $left ++; } if ($left<$right) { $arr [$right] = $arr [$left]; $right --; } } $arr [$left] = $key; return $left; } $left = 0; $right = 9; $arr = array (); for($i = $left; $i <= $right; $i ++) { $arr [$i] = rand ( 0, 10 ); } echo implode ( "\t", $arr ) . '<br />'; qSort ( $arr, $left, $right ); var_dump ( $arr ); ?>