function quickSortRecursion(&$arr, $begin, $end)
{
if ($begin < $end) {
$left = $begin;
$right = $end;
$temp = $arr[$begin];
// $temp为基准元素
// 把小于$temp的元素放到$temp左边,大于它的放在右边
while ($left < $right) {
while ($left < $right && $arr[$right] >= $temp) $right--;
if ($left < $right) {
$arr[$left++] = $arr[$right];
}
while ($left < $right && $arr[$left] <= $temp) $left++;
if ($left < $right) {
$arr[$right--] = $arr[$left];
}
}
$arr[$left] = $temp;
quickSortRecursion($arr, $begin, $left - 1);
quickSortRecursion($arr, $left + 1, $end);
}
return $arr;
}
function quickSort($arr)
{
$len = count($arr);
quickSortRecursion($arr, 0, $len - 1);
return $arr;
}
$arr = [3, 1, 13, 5, 7, 11, 2, 4, 14, 9, 15, 6, 12, 10, 8];
print_r(quickSort($arr));
exit;
//insertSort
$arr = array(3, 2, 1);
for ($i = 0; $i < count($arr) - 1; $i++) {
$k = $i;
for ($j = $i + 1; $j < count($arr); $j++) {
$k = ($arr[$k] > $arr[$j]) ? $j : $k;
}
$tmp = $arr[$i];
$arr[$i] = $arr[$k];
$arr[$k] = $tmp;
}
print_r($arr);
exit;
//bubbleSort
$arr = array(3, 2, 1);
$flag = 0;
for ($i = count($arr) - 1; $i > 0; $i--) {
for ($j = 1; $j <= $i; $j++) {
if ($arr[$j - 1] > $arr[$j]) {
$flag = 1;
$tmp = $arr[$j - 1];
$arr[$j - 1] = $arr[$j];
$arr[$j] = $tmp;
}
if ($flag == 0) { //如果本次没有发生交换的话就跳到下一次
continue;
}
}
}
print_r($arr);
exit;
//每次由队列的头部开始删除元素
//从1 开始
//当数到3的时候,就删除第3个元素,然后从第四个开始重新从1开始
//n为整个数组 m相隔几个删除一个
function ysf($n, $m)
{
$arr = range(1, $n);
$i = 0;
while ($m <= count($arr)) {
++$i;
$surive = array_shift($arr); //每一次都要删除一个元素
if ($i % $m <> 0) {
array_push($arr, $surive);
} elseif ($i > count($surive)) { //删除了要重新从1开始数了。
$i = 0;
}
}
return $arr;
}
var_dump(ysf(7, 3));
exit;
转载请注明原文地址: https://www.6miu.com/read-82649.html