クイックソート
関数 Quicksort($arr,$lo0,$hi0) {
$lo = $lo0;
$hi = $hi0;
$flag = true;
$tmp = 0;
if($lo>$hi) {
return ;
}
while ($lo!=$hi) {
if($arr[$lo]>$arr[$hi]) {
$tmp = $arr[$lo];
$arr[$lo] = $arr[$hi] ];
$arr[$hi] = $tmp;
$flag = ($flag==true)?false:true;
}
if ($flag) {
$lo++;
}else {
$hi--;
}
}
$lo--;
$hi++;
クイックソート($arr,$lo0,$lo);
クイックソート($arr,$hi,$hi0);
}
$arr = 配列(5,4,2,6,8,1,10,9);
クイックソート($arr,0,count($arr)-1);
for($i=0; $i
echo "arr[$i]=".$arr[$i]."
";
}
なぜ上の赤い部分が判断できないのですか? 。
-----解決策---------
if($arr[$lo]>$arr[$hi]) { 判定は無効です
が、配列要素を交換するアクションは保存されません
function Quicksort(&$arr ,$lo0,$ hi0) {
参照を渡すだけです
------解決策------------------
この関数には戻り値がありません。これを行う必要があります。
function Quicksort(&$arr,$lo0,$hi0)// "e