PHP 的 qsort


將參考連接中的 qsort 轉了用 PHP 來寫.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
function exchange(&$a, $i, $j) {
if ($i == $j) {
return;
}

$a[$i] ^= $a[$j];
$a[$j] ^= $a[$i];
$a[$i] ^= $a[$j];
}

// one finger
function partition(&$a, $p, $r) {
$x = $a[$r];
$i = $p - 1;
for($j = $p; $j < $r; ++$j) {
if ($a[$j] < $x) {
++$i;
exchange($a, $i, $j);
}
}
exchange($a, $i + 1, $r);
return $i + 1;
}

// two finger
/*
function partition(&$a, $p, $r) {
$x = $a[$r];

$left = $p;
$right = $r - 1;
while($left <= $right) {
if ($a[$left] < $x) {
$left++;
}

if ($left <= $right && $a[$right] >= $x) {
$right--;
}

if ($left < $right && $a[$left] >= $x && $a[$right] <= $x) {
exchange($a, $left, $right);
}
}

exchange($a, $left, $r);

return $left;
}
*/

function quicksort(&$a, $p, $r) {
if ($p >= $r) {
return;
}

$q = partition($a, $p, $r);
quicksort($a, $p, $q - 1);
quicksort($a, $q + 1, $r);
}

function main() {
$a = array(2, 8, 7, 1, 3, 5, 6, 4, 80, 100, -100, -10);

quicksort($a, 0, sizeof($a) - 1);

for($i=0;$i<sizeof($a);$i++) {
printf("%d ", $a[$i]);
}
printf("\n");
}

main();
?>

參考: http://blog.csdn.net/moonvs2010/article/details/8607044