这里有一个使用最小/最大并且没有分支的答案(https://stackoverflow.com/a/14676309/2233603 https://stackoverflow.com/a/14676309/2233603)。实际上 4 个最小/最大运算就足以找到中位数,不需要异或:
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