这是一个面试问题&我正在寻找专家可以更好地回答的问题......
如何在Java中对包含数百万个数字的数组进行排序?
谢谢!
答案 0 :(得分:4)
面试问题从来没有正确的答案。 面试官教会问开放式问题,看看你如何思考和推理问题。 反过来,您应该展示思维过程并证明您可以用“软件工程方式”思考。
类似的东西:
答案 1 :(得分:0)
使用JVM“专家”的方式:
Arrays.sort(numberArray);
答案 2 :(得分:0)
因为它是整数,并且有一百万个 - 基数排序,就地并且有可用CPU的线程数
答案 3 :(得分:0)
在数组中存储数百万个数据不是一个好主意。它可能会导致MemoryOutOfBounds异常。这会导致性能问题。 但是如果你想对数组进行排序
int[] intArray = new int[] {4, 1, 3, -23};
Arrays.sort(intArray);
// [-23, 1, 3, 4]
String[] strArray = new String[] {"z", "a", "C"};
Arrays.sort(strArray);
// [C, a, z]
// Case-insensitive sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
// [a, C, z]
// Reverse-order sort
Arrays.sort(strArray, Collections.reverseOrder());
// [z, a, C]
// Case-insensitive reverse-order sort
Arrays.sort(strArray, String.CASE_INSENSITIVE_ORDER);
Collections.reverse(Arrays.asList(strArray));
// [z, C, a]
答案 4 :(得分:0)
如果数字在有限范围内,则使用100万的布尔数组。这将使内存圣人降至125 MB。使用index作为数字和值为true或false。 Nullify现有数组,并将其填充为通过布尔数组读取。
答案 5 :(得分:0)
我们可以将条目放在NavigableHashMap
中,以便以排序的方式保存数据。因此,在放置密钥时检查是否已存在密钥,然后将值增加1.现在,同时提取数据打印密钥的倍数值。就在这种情况下,我们刚刚运行了一次O(N)。