比较数字排序然后得到中值

标签 c sorting combinatorics verilog median

使用按位运算符或比较运算符对五个整数进行排序可以通过首先获得最高数字然后第二高然后第三等来实现。

这是我获得最高数字的代码:

#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 次比较操作视为二进制输入。然后你有选择:

  1. 绘制一个 10 输入卡诺图并尽可能简化逻辑。
  2. 构建一个 10 位数作为表的索引。

有些可能性永远不会发生,所以我确信可以进行一些简化。例如,如果 (a>b) 和 (b>c) 则 (a>c) 将始终为真。这将有助于方法 #1 并在方法 #2 中生成错误案例。

关于比较数字排序然后得到中值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8182490/

相关文章:

algorithm - 所有子集的乘积之和,

c# - 当角色可以组合到其他角色时,如何从列表中获取所有角色组合

c - 根据另一个数组重新排列

c - 存储指针的整数差异?

c - 如何使用 fscanf 读取文件

c - 递归快速排序,计数交换和比较问题

ios - 在 iOS 中对包含字母数字单词的数组进行排序

delphi - 如何在 Delphi 中用稳定排序替换 StringList.Sort?

php - 从 PHP 中的关联数组数组中删除重复项/排序

python - Python 中的匈牙利算法