如何对大量的int进行排序?

时间:2017-10-20 13:13:07

标签: java arrays

在求职面试中,我被问到以下问题:

我们有一个客户端应用程序可以发送请求并接收一个int数据流(可能很大,但小于INT_MAX)。我们需要这样做:

Int Data  ----> Our  ----> Sorted Int Data
Stream          App        Data Stream

所以我会按如下方式编写方法:

public int[] sort(int[] array){
   Arrays.sort(array);
   return array;
}

问题是 array无法放入堆叠中,并且会被放入中,这会降低性能。如何以良好表现的方式重构

2 个答案:

答案 0 :(得分:10)

独立于编程语言,通常的方法是对大量数据进行排序:

  • 只排序一大块数据
  • 使用合并排序合并所有已排序的块。

一些优化的实现甚至可以对大致适合CPU缓存的数据集执行插入排序或类似的操作(例如,timsort)。

但是,由于数据确实适合RAM,因此Java的本机实现应该已经快得多了。如果它超过RAM,或者您想限制RAM使用量,则必须使用external sorting。但这比较慢,因为它进入磁盘

答案 1 :(得分:0)

嗯......如果他们要求如何对数据进行排序而不提供要排序的数据,那么Arrays.sort()应该可以正常工作。但是,排序的最佳方式取决于数据,Quicksort和Insertion是排序整数数组最快的,但对于浮点数组,您需要一种专门的排序方法。

How to vertically align text inside a flexbox?

^这是许多可接受的排序算法排序的完整列表,每个方法都有数学上的缺点。