繁体   English   中英

在Java中对部分排序的原始整数数组进行排序

[英]Sorting an array of partially sorted primitive integers in Java

有问题的数组可以包含等于或大于零的任何整数,并且数字是唯一的。 数字必须按升序排列。

数组的大小通常小于100。大多数数组已经排序。 多数情况下,我平均指的是至少90%。

我发现了TimSort的实现,但它不适用于原始值。 自动装箱会导致很多开销。

性能是最关键的,因为将多次调用排序算法。

使用Arrays.sort

int[] array = /* something */;
Arrays.sort(array);

仅一行,这(非常明显)既易于使用又可读性强。 在编写代码时,这应该是您的第一要务。 由于标准库的编写者已经在性能上付出了很多努力, 尤其是与排序算法有关,这也将很快实现。

唯一应该使用Arrays.sort是,如果您几乎完全完成了系统的工作,仔细地分析了系统,并确定对数组进行排序的代码部分就是瓶颈。 即使那样,您仍然可能无法编写性能明显更好的自己的排序算法。

取决于“几乎已排序”的意思。 如果对数组进行几乎排序(排序时的线性复杂度),则插入排序是一种非常有效的算法,但是性能会因异常值是接近还是远离其最终排序位置而有所不同。 例如, [1,2,3,4,6,5,7,8,9]排序速度将比[1,3,4,5,6,7,8,9,2]快一些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM