下面是有php实现的几种排序,有一次面试的时候也碰到过,在此写下,方便以后使用:
header('Content-type:text/html;charset=utf-8');define('MAXNUM', 10);$arr = array();echo '排序之前:';for ($i = 0; $i < MAXNUM; $i++) { echo ($arr[] = rand(0, 100)) . ' ';}selSort($arr);insertSort($arr);bubSort($arr);shakerSort($arr);echo '快速排序:';$quickSortRes = quickSort($arr);for ($k = 0; $k < MAXNUM; $k++) { echo $quickSortRes[$k] . ' ';}function selSort($arr){ echo '选择排序:'; for ($i = 0; $i < MAXNUM - 1; $i++) { $m = $i; for ($j = $i + 1; $j < MAXNUM; $j++) { $arr[$m] > $arr[$j] && $m = $j; } $m != $i && swap($arr[$i], $arr[$m]); echo '第'. ($i + 1) . '次排序结果:'; for ($k = 0; $k < MAXNUM; $k++) { echo $arr[$k] . ' '; } }}function insertSort($arr){ echo '插入排序:'; for ($j = 1; $j < MAXNUM; $j++) { $t = $arr[$j]; //for ($i = $j - 1; $i > -1; $i--) { // if ($t > $arr[$i]) { // $arr[$i + 1] = $t; // break; // }else{ // $arr[$i + 1] = $arr[$i]; // $arr[$i] = $t; // } //} $i = $j - 1; while ($t < $arr[$i]) { $arr[$i + 1] = $arr[$i]; $i --; if ($i < 0) break; } $arr[$i + 1] = $t; echo '第'. $j . '次排序结果:'; for ($k = 0; $k < MAXNUM; $k++) { echo $arr[$k] . ' '; } }}function bubSort($arr){ echo '冒泡排序:'; $flag = 1; for ($i = 0; $i < MAXNUM - 1 && $flag == 1; $i++) { $flag = 0; for ($j = 0; $j < MAXNUM - $i - 1; $j++) { if ($arr[$j + 1] < $arr[$j]) { swap($arr[$j + 1], $arr[$j]); $flag = 1; } } echo '第'. ($i + 1) . '次排序结果:'; for ($k = 0; $k < MAXNUM; $k++) { echo $arr[$k] . ' '; } }}function shakerSort($arr){ echo 'Shaker排序(双向冒泡排序):'; $left = $shift = $num = 0; $right = MAXNUM - 1; while ($left < $right) { for ($i = 0; $i < $right; $i++) { if ($arr[$i] > $arr[$i + 1]) { swap($arr[$i], $arr[$i + 1]); $shift = $i; } } $right = $shift; for ($j = $right; $j > $left; $j--) { if ($arr[$j - 1] > $arr[$j]) { swap($arr[$j - 1], $arr[$j]); $shift = $j; } } $left = $shift; echo '第'. (++$num) . '次排序结果:'; for ($k = 0; $k < MAXNUM; $k++) { echo $arr[$k] . ' '; } }}function quickSort($arr){ if (count($arr) <= 1) return $arr; $key = $arr[0]; $left_arr = array(); $right_arr = array(); for ($i = 1; $i < count($arr); $i++) { if ($arr[$i] <= $key) $left_arr[] = $arr[$i]; else $right_arr[] = $arr[$i]; } $left_arr = quickSort($left_arr); $right_arr = quickSort($right_arr); return array_merge($left_arr, array($key), $right_arr);}function swap(&$a, &$b){ $t = $a; $a = $b; $b = $t;}