我有一个int数组
int array[] = ...
我可以使用
进行排序。Arrays.sort(array);
但是 Arrays.sort 使用快速排序,有时会导致 O(n^2) 复杂度。我有一个想法,将其转换为 List 然后进行排序(使用归并排序,因此上限为 O(n log n)),但缺点是由于从 int 到 Integer 的装箱而创建了大量对象。
我的第三种方法是这样的:
array = Arrays.stream(array).sorted().toArray();
我只在IntStream上操作,但不幸的是文档中没有提到复杂度。我正在寻找类似的问题,只找到了这个java.util.stream.Stream.sorted()的Big-O复杂度,但它并不有用,因为有两个不同的答案(第一个当然部分错误,因为Arrays.sort并不总是O(n log n))。那第二个呢?我没有找到证明。
Arrays.sort
的 Javadoc:“对于许多导致其他快速排序算法退化为二次性能的数据集,此算法提供 O(n log(n)) 的性能,并且通常比传统的(单个枢轴)快速排序实现更快。” 你的前提是错误的。 - Tunaki