在求职面试中,我被问到以下问题:
我们有一个客户端应用程序可以发送请求并接收一个int数据流(可能很大,但小于INT_MAX)。我们需要这样做:
Int Data ----> Our ----> Sorted Int Data
Stream App Data Stream
所以我会按如下方式编写方法:
public int[] sort(int[] array){
Arrays.sort(array);
return array;
}
问题是大 array
无法放入堆叠中,并且会被放入堆中,这会降低性能。如何以良好表现的方式重构?
答案 0 :(得分:10)
独立于编程语言,通常的方法是对大量数据进行排序:
一些优化的实现甚至可以对大致适合CPU缓存的数据集执行插入排序或类似的操作(例如,timsort)。
但是,由于数据确实适合RAM,因此Java的本机实现应该已经快得多了。如果它超过RAM,或者您想限制RAM使用量,则必须使用external sorting。但这比较慢,因为它进入磁盘
答案 1 :(得分:0)
嗯......如果他们要求如何对数据进行排序而不提供要排序的数据,那么Arrays.sort()应该可以正常工作。但是,排序的最佳方式取决于数据,Quicksort和Insertion是排序整数数组最快的,但对于浮点数组,您需要一种专门的排序方法。
How to vertically align text inside a flexbox?
^这是许多可接受的排序算法排序的完整列表,每个方法都有数学上的缺点。