按运行时排序歌曲集合

时间:2011-05-28 06:10:19

标签: java algorithm sorting

我必须制作一个程序,按运行时对歌曲集合进行排序。我必须分析一系列歌曲,每首歌曲都有一个“Title”字符串,一个“Composer”字符串和一个“Running Time”整数。输入将通过stdin传送,输出将在stdout中。

以下是输入示例:

3
&
Pink Frost&Phillipps, Martin&234933
Se quel guerrier io fossi&Puccini, Giacomo&297539
Non piu andrai&Mozart&234933
M'appari tutt'amor&Flotow, F&252905

输出:

Se quel guerrier io fossi&Puccini, Giacomo&297539
M'appari tutt'amor&Flotow, F&252905
Non piu andrai&Mozart&234933

我知道我必须通过运行时间对它们进行排序,但我不确定使用哪种排序算法。根据一般知识,我想到的两个排序算法是Merge Sort和Quicksort,因为它们似乎是平均最快的。我也想过使用Comparator来比较Collection中的两个“Running time”元素。

有人可以指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

最简单的方法是编写一个类来保存上面的值,它实现了Comparable接口(或者你可以编写自己的Comparator)。 compareTo方法可以检查运行时并相应地返回一个值。

然后将其传递给Collections.sort()方法。此方法使用Merge Sort的优化版本。您不必编写自己的排序逻辑来以这种方式处理它,您可以依靠Java平台为您完成。除非您需要对排序方法进行特定的性能调整,否则我认为这是最简单的方法(KISS - Keep It Simple,Stupid)。

摘自Collections.sort上的Java API文档(http://download.oracle.com/javase/1,5.0/docs/api/java/util/Collections.html#sort%28java.util.List%29 ):

  

排序算法是修改后的mergesort(如果低子列表中的最高元素小于高子列表中的最低元素,则省略合并)。该算法提供有保证的n log(n)性能。此实现将指定的列表转储到数组中,对数组进行排序,并迭代列表,从数组中的相应位置重置每个元素。这样可以避免尝试对链接列表进行排序所导致的n2 log(n)性能。

答案 1 :(得分:0)

坚持使用String的compareTo()方法或int(运行tittle)并在Comparator中使用它们。接下来 - 使用Collections.sort()使用非常好的合并排序:)

啊,在运行时,你应该将这些歌曲添加到歌曲列表 - ArrayListLinkedList。然后按Collections.sort(yourListName, new yourComparatorName());

对它们进行排序