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