下面是有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;}