【问题标题】:What method to call inside TimSort method?在 TimSort 方法中调用什么方法?
【发布时间】:2011-05-02 23:17:34
【问题描述】:

TimSort 是一种在 Java 7 中默认用于排序的算法。

我找到了这个来源,但我不明白要调用哪个方法,因为它们都是私有的。 有人能理解吗?谢谢。

http://cr.openjdk.java.net/~martin/webrevs/openjdk7/timsort/raw_files/new/src/share/classes/java/util/TimSort.java

【问题讨论】:

    标签: java sorting timsort


    【解决方案1】:

    你什么都不叫。

    它具有 java.util 私有包的排序方法。当您调用 Arrays.sort() 函数或类似函数时,您让它调用它们。

    评论清楚地表明了这一点:

    /*
     * The next two methods (which are package private and static) constitute
     * the entire API of this class.  Each of these methods obeys the contract
     * of the public method with the same signature in java.util.Arrays.
     */
    
    static <T> void sort(T[] a, Comparator<? super T> c) {
        sort(a, 0, a.length, c);
    }
    
    static <T> void sort(T[] a, int lo, int hi, Comparator<? super T> c) {
        ...
    }
    

    从我上次发表评论的时间来看,这用了不到 15 分钟的时间:

    结果:

    C:\Documents and Settings\glowcoder\My Documents>java SortTest
    Time for default: 4094ms
    Time for timsort: 3813ms
    
    C:\Documents and Settings\glowcoder\My Documents>
    

    【讨论】:

    • 该死的。您知道 Java 中 Tim 排序的任何“完整”来源吗?我想我还不能调用这个方法,因为我们不在 Java 7 中。=x 谢谢。
    • @Seva 您是否有特殊需要致电 TimSort?而且,有什么阻止你复制/粘贴它并制作一两个方法public 并更改它所在的包吗?
    • 是的,我想测试方法速度。在该代码中有一行调用 Arrays.Sort,在当前的 Java 版本中,它只会调用调整的快速排序或调整的合并排序。它不会调用 TimSort,因为它将在 Java 7 中实现。
    • 那么,请问有人知道完整的来源吗?
    • @Seva 您可以通过在我列出的两种方法之前添加“public”来修改它以使其工作,然后将包更改为您想要的任何包...然后您可以致电TimSort.sort(myArray,myComparator);跨度>
    猜你喜欢
    • 2012-05-15
    • 2011-01-08
    • 1970-01-01
    • 2011-11-06
    • 2010-10-27
    • 2012-08-04
    • 2017-10-31
    相关资源
    最近更新 更多