在运行时对歌曲集合进行排序

问题描述

| 我必须编写一个程序,以按运行时对一组歌曲进行排序。我必须分析歌曲的选择,每首歌曲都带有\“ 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,因为它们似乎平均是最快的。我也有使用比较器比较集合中两个“运行时间”元素的想法。 有人能指出我正确的方向吗?     

解决方法

        只需对String或int(运行标题)坚持
compareTo()
方法,然后在
Comparator
中使用它们。接下来-使用
Collections.sort()
,它使用很好的合并排序:) 嗯,在运行时,您应该将这些歌曲添加到歌曲列表-
ArrayList
LinkedList
。并按
Collections.sort(yourListName,new yourComparatorName());
排序     ,        最简单的方法是编写一个包含上述值的类,该类实现Comparable接口(或者您可以编写自己的Comparator)。 compareTo方法可以检查运行时并相应地返回一个值。 然后将其传递给Collections.sort()方法。此方法使用合并排序的优化版本。您不必编写自己的排序逻辑即可以这种方式进行处理,而您可以依靠Java平台为您完成此操作。除非您需要对排序方法进行特定的性能调整,否则我认为这是最简单的方法(KISS-保持简单,愚蠢)。 摘自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)性能。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...