冒泡算法的原理:
重复走访过要排序的数列,一次比较两个元素,如果顺序错误就交换。
每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置
//快速排序:通过一趟排序将要排序的数据分割成独立的两部分,
//其中一部分的所有数据都比另外一部分的所有数据都要小,
//然后再按此方法对这两部分数据分别进行快速排序,
//整个排序过程可以递归进行,以此达到整个数据变成有序序列。
重复走访过要排序的数列,一次比较两个元素,如果顺序错误就交换。
function bubbleSort($numbers) {
$cnt = count($numbers);
for ($i = 0; $i < $cnt; $i++) {
for ($j = 0; $j < $cnt - $i - 1; $j++) {
if ($numbers[$j] > $numbers[$j + 1]) {
$temp = $numbers[$j];
$numbers[$j] = $numbers[$j + 1];
$numbers[$j + 1] = $temp;
}
}
}
return $numbers;
}
$num = array(20, 40, 60, 80, 30, 70, 90, 10, 50, 0);
var_dump(bubbleSort($num));
选择算法原理:
每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置
function selectionSort($numbers)
{
$count = count($numbers);
for ($i = 0; $i < $count - 1; $i++) {
$min = $i;
for ($j = $i + 1; $j < $count; $j++) {
if ($numbers[$min] > $numbers[$j]) {
$min = $j;
}
}
if ($min != $i) {
$temp = $numbers[$min];
$numbers[$min] = $numbers[$i];
$numbers[$i] = $temp;
}
}
return $numbers;
}
//快速排序:通过一趟排序将要排序的数据分割成独立的两部分,
//其中一部分的所有数据都比另外一部分的所有数据都要小,
//然后再按此方法对这两部分数据分别进行快速排序,
//整个排序过程可以递归进行,以此达到整个数据变成有序序列。
function quickSort($numbers) {
static $test = 0;
if (count($numbers) > 1) {
$k = $numbers[0];
$x = [];
$y = [];
$count = count($numbers);
for ($i = 1; $i < $count; $i++) {
if ($numbers[$i] <= $k) {
$x[] = $numbers[$i] ;
} elseif ($numbers[$i] > $k) {
$y[] = $numbers[$i] ;
}
}
$x = quickSort($x);
$y = quickSort($y);
$test++;
var_dump(array_merge($x, array($k), $y));var_dump('测试次数'.$test);
return array_merge($x, array($k), $y);
} else {
return $numbers;
}
}
$numbers = [20,40,60,80,30,70,90,10,50,0];
//var_dump(bubbleSort($numbers));
//var_dump(selectionSort($numbers));
var_dump(quickSort($numbers));