【发布时间】:2015-03-30 21:32:47
【问题描述】:
堆排序、快速排序和合并排序哪一种排序算法可以处理连续的数据流?我想要一个始终排序的列表,以便新值可以立即在正确的位置进入列表。我似乎找不到始终维护排序列表和拥有连续数据流的细节。
class StreamSorter<A extends Comparable <A>> {
// A[] sorted_list;
// other fields and initialiser: TODO
public void add_new_element(A x) {
// add new element to the data received so far and create a sorted list.
}
}
如何实现这个类,这样每次调用 add_new_element 时,sorted_list 都会包含目前所有排序好的元素?
对不起,如果这是一个愚蠢的问题,相信我,我已经尽我所能。
干杯
【问题讨论】:
-
你能澄清一下连续数据流吗?如果这意味着它正在进行中,那么您就无法真正对其进行排序,因为排序算法适用于有限列表。您可以按块对其进行排序,但我认为这不是您要问的。或者,如果您正在接收输入流并保留到目前为止看到的所有内容的列表并进行排序,那么插入排序将是合适的。
-
与其将排序算法与与顺序无关的数据结构相结合,为什么不寻找一种能够保持其元素排序的数据结构呢?像 TreeBag/TreeMultiset 或类似的。您也可以编写自己的
List子类,覆盖add()/insert()方法并在每次调用后重新排序。 -
看看PriorityQueue。您可以将对象放入其中,无论何时取出它们,它们总是会按排序顺序出来。
-
顺便说一句,在 Java 中,方法名称中没有下划线(通常)。惯例是使用驼峰式大小写,如
addNewElement,更好的选择是add。
标签: java algorithm sorting continuous