
基本的なソートアルゴリズムのクイックソートのプログラムメモ。
-
<?php
-
-
/*
-
* クイックソート
-
* $numArr = ソートする配列
-
* $left = 開始位置(0で決め打ち)
-
* $right = 終了位置($numArrの要素数)
-
* $order = ソートの昇順(ASC)・降順(DESC) デフォルトは昇順
-
*/
-
function quickSort(&$numArr, $left = 0, $right, $order = "ASC") {
-
-
//要素数が1以下であれば
-
//ソートをする必要がないので処理を終了する。
-
if ($left>= $right) {
-
return;
-
}
-
-
swap
($numArr,
$left,
ceil(($left+
$right)/
2));
-
$last = $left;
-
-
for ($i=$left+1; $i<=$right; $i++) {
-
-
if ($order == "ASC") {
-
-
if ($numArr[$i] <$numArr[$left]) {
-
swap($numArr, ++$last, $i);
-
}
-
-
} else {
-
-
if ($numArr[$i]>$numArr[$left]) {
-
-
swap($numArr, ++$last, $i);
-
-
}
-
}
-
}
-
-
swap($numArr, $left, $last);
-
quickSort($numArr, $left, $last-1, $order = $order);
-
quickSort($numArr, $last+1, $right, $order = $order);
-
}
-
//要素を入れ替える関数
-
function swap(&$v, $i, $j) {
-
$temp = $v[$i];
-
$v[$i] = $v[$j];
-
$v[$j] = $temp;
-
}
-
-
//ソート対象の配列
-
$numArr =
array(92,
15,
26,
86,
105,
54,
29,
42,
75);
-
-
-
-
-
-
-
quickSort
($numArr,
0,
count($numArr)-
1,
$order=
"DESC");
-
-
-
-
以上。