ここには、最小/最大でブランチを使用しない回答があります( https://stackoverflow.com/a/14676309/2233603 )。実際には、中央値を見つけるには 4 回の最小/最大操作で十分です。xor は必要ありません。
median = max(min(a,b), min(max(a,b),c));
ただし、中央値のインデックスは得られません...
すべてのケースの内訳:
a b c
1 2 3 max(min(1,2), min(max(1,2),3)) = max(1, min(2,3)) = max(1, 2) = 2
1 3 2 max(min(1,3), min(max(1,3),2)) = max(1, min(3,2)) = max(1, 2) = 2
2 1 3 max(min(2,1), min(max(2,1),3)) = max(1, min(2,3)) = max(1, 2) = 2
2 3 1 max(min(2,3), min(max(2,3),1)) = max(2, min(3,1)) = max(2, 1) = 2
3 1 2 max(min(3,1), min(max(3,1),2)) = max(1, min(3,2)) = max(1, 2) = 2
3 2 1 max(min(3,2), min(max(3,2),1)) = max(2, min(3,1)) = max(2, 1) = 2