比较数字进行排序然后得到中值
使用按位或比较运算符对五个整数进行排序可以通过以下方式实现:首先获取最大的数字,然后获取第二大的数字,然后获取第三大的数字,依此类推。
这是我获取最高数字的代码:
#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;
}
我认为使用此方法可以获得第二、第三、第四和第五最高数字。
还有其他方法可以使用比较/按位运算符获取五个整数的中位数吗?任何其他组合方法可能是有效的。
顺便说一句,我将在硬件中实现这个算法。
使用组合方法进行排序比使用状态机更快。
Sorting five integers using bitwise or comparison operators can be achieved by first getting the highest number then the second highest then the third and so on.
Here is my code in getting the highest number:
#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;
}
I think getting the second, third, forth and fifth highest number could be possible using this method.
Is there any other way in getting the median of five integers using comparison/bitwise operators? any other combinatorial method might be valid.
By the way, I'm going to implement this algorithm in hardware.
Using combinatorial method in sorting will be fast rather than using a state machine.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一种思考方法是将 5 个数字之间的 10 次比较运算视为二进制输入。然后您有选择:
有些可能性永远不会发生,所以我确信可以进行一些简化。例如,如果(a>b)且(b>c),则(a>c)将始终为真。这将有助于方法#1 并在方法#2 中生成错误情况。
One way to think about it is to consider the 10 comparison operations between the 5 numbers as your binary inputs. Then you have options:
Some of the possibilities will never occur, so I'm sure there's some simplification possible. For instance if (a>b) and (b>c) then (a>c) will always be true. Which will help with approach #1 and generates an error case in approach #2.
五个整数中第三大的数是中位数,所以如果你得到第三大的数就可以了。
The third highest number of five integers is the median, so if you get the third highest number you are fine.
更新
我使用排序网络在 verilog 中进行了组合排序。
@Steve Jessop 感谢您提供信息。
感谢 @David Winant 和 @sth 提供的想法。 =)
UPDATE
I made a combinatorial sorting in verilog using sorting networks.
@Steve Jessop thank you for providing information.
To @David Winant and @sth for providing ideas. =)