#tempを使用する基本的な置換 function swap(&$a, &$b) { if($a != $b) { $temp = $a; $a = $b; $b = $temp; } }
#整数ならこれでもOK function swap(&$a, &$b) { if($a != $b) { $a = $a + $b; $b = $a - $b; $a = $a - $b; } }
上記の加減で行うと算術オーバーフロー例外を起こす可能性がある様子
それを回避する為に XOR交換 で実装してみたが…
# XOR交換 を試してみたがうまくいかない function swap(&$a, &$b) { if($a != $b) { $a = $a xor $b; $b = $a xor $b; $a = $a xor $b; } }
やりかたがそもそも間違っていた
# ビット演算は^を使う function swap3(&$a, &$b) { if($a != $b) { $a = $a ^ $b; $b = $a ^ $b; $a = $a ^ $b; } }
★参考リンク XOR交換アルゴリズム - Wikipedia PHP: 論理演算子 - Manual PHP: ビット演算子 - Manual