实现类似于基数的排序

时间:2010-05-19 09:44:53

标签: algorithm sorting

嗨,我需要编写类似于排序的排序,也许它与基数排序类似 而且(这不是作业,因为我自己创造了问题,如果有人可以帮助我,请问)问题是这样的 假设我有数组int x [] = new int [] {4,5,3,2,1};  让我把它写成二进制形式 5 -0101 4- 0100 3-0011 2-0010 1-0001  我想通过使用按位操作符来排序这些元素或检查每个位,如果更少的交换,任何人都可以帮助我  例如,取5和4检查第一个最右边的位0 == 0所以继续1索引也1 == 1接下来相同的0 = 0和最后一个1> 0这意味着第一个元素大于第二个所以交换它< / p>

  

Paraphasing:

     

我需要创建一个类似于基数的排序。

     

假设我有一个数组:int x[] = new int[] {4, 5, 3, 2, 1};

     

或者,以二进制形式:5-0101 4-0100 3-0011 2-0010 1-0001

     

我想通过使用按位运算符对这些元素进行排序,或者检查每个位和(如果更少)交换它。例如,考虑5和4:

     

二进制中最左边或最高有效位(MSB)为5,MSB为4.自0 == 0以来,该过程继续进行。接下来的两位(0然后1)也是等效的。最后,最右边或最低有效位(LSB)为5,而4的LSB为0,表示应交换这两个值。

1 个答案:

答案 0 :(得分:1)

要获取k的{​​{1}}位,您可以执行以下操作:

int x

这是一个测试工具:

int bit = (x >> k) & 1;

打印(带注释)

    int xs[] = {4,5,3,2,1};
    for (int k = 0; k < 4; k++) {
        for (int x : xs) {
            int bit = (x >> k) & 1;
            System.out.format("|%s|  ", bit);
        }
        System.out.println();
    }

这里的棘手位是符号位,即x= 4 5 3 2 1 k= |0| |1| |1| |0| |1| 0 |0| |0| |1| |1| |0| 1 |1| |1| |0| |0| |0| 2 |0| |0| |0| |0| |0| 3 上的位31。如果是int,则表示负数。您可能希望首先使用仅适用于正1的实现,然后再添加对负数的支持。

另见