在java中对包含二进制数的数组进行排序

时间:2014-07-15 09:43:06

标签: java arrays binary

我想要的是我想要排序一个由二进制数组成的数组,即{0,01,001,110,1},然后排序后的答案应该是java中的{0,1,01,001,110}。它还必须根据长度。

1 个答案:

答案 0 :(得分:3)

您要求的并不是二进制数字的真正排序。我猜你的数组是一个String数组?

你可以实现一个首先比较字符串长度的比较器,如果它们相等,则将数字转换为字节或整数并比较这些值。


代码示例:

import java.util.Arrays;
import java.util.Comparator;

public class BinaryStringComparator implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        // check input
        if (!o1.matches("[01]*") || !o2.matches("[01]*")) {
            throw new IllegalArgumentException("Only strings representing binary values are allowed");
        }

        // compare lengths first
        if (o1.length() < o2.length()) {
            return -1;
        }

        if (o1.length() > o2.length()) {
            return 1;
        }

        // compare values if the length is equal
        final int i1 = Integer.parseInt(o1, 2);
        final int i2 = Integer.parseInt(o2, 2);
        return Integer.compare(i1, i2);
    }

    public static void main(String[] args) {
        // input was {0,01,001,110,1}
        String[] input = { "0", "01", "001", "110", "1" };
        Arrays.sort(input, new BinaryStringComparator());
        System.out.println(Arrays.toString(input));
    }
}