使用按位运算符或比较运算符对五个整数进行排序可以通过首先获得最高数字然后第二高然后第三等来实现。
这是我获得最高数字的代码:
#include <stdio.h>
int main() {
int a, b, c, d, e;
int aa, bb, cc, dd, ee;
a = 4; b = 2; c = 5; d = 1; e = 3;
aa = (a > b) ?
((a > c) ? ((a > d) ? ((a > e) ? a : e) : ((d > e) ? d : e)) :
((c > d) ? ((c > e) ? c : e) : ((d > e) ? d : e))) :
((b > c) ? ((b > d) ? ((b > e) ? b : e) : ((d > e) ? d : e)) :
((c > d) ? ((c > e) ? c : e) : ((d > e) ? d : e)));
printf("highest: %d\n", aa);
return 0;
}
我认为使用这种方法可以获得第二、第三、第四和第五高的数字。
有没有其他方法可以使用比较/按位运算符获取五个整数的中位数?任何其他组合方法都可能有效。
顺便说一下,我打算用硬件实现这个算法。
在排序中使用组合方法比使用状态机更快。
最佳答案
一种思考方法是将 5 个数字之间的 10 次比较操作视为二进制输入。然后你有选择:
- 绘制一个 10 输入卡诺图并尽可能简化逻辑。
- 构建一个 10 位数作为表的索引。
有些可能性永远不会发生,所以我确信可以进行一些简化。例如,如果 (a>b) 和 (b>c) 则 (a>c) 将始终为真。这将有助于方法 #1 并在方法 #2 中生成错误案例。
关于比较数字排序然后得到中值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182490/