Какой метод вызывать внутри метода TimSort?

#java #sorting #timsort

#java #сортировка #timsort

Вопрос:

TimSort — это алгоритм, который будет использоваться по умолчанию в Java 7 для сортировки.

Я нашел этот источник, но я не понимаю, какой метод вызывать, поскольку все они являются частными. Кто-нибудь может понять? Спасибо.

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

Ответ №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 SettingsglowcoderMy Documents>java SortTest
Time for default: 4094ms
Time for timsort: 3813ms

C:Documents and SettingsglowcoderMy Documents>
  

Комментарии:

1. черт. Знаете ли вы какой-либо «полный» источник сортировки по времени в Java? Думаю, я пока не могу вызвать этот метод, поскольку мы не в Java 7. =x Спасибо.

2. @Seva у вас есть конкретная необходимость вызвать TimSort? И есть ли что-нибудь, что мешает вам скопировать / вставить это и создать один или два метода public и изменить, в каком пакете это находится?

3. да, я хочу протестировать скорость метода. В этом коде есть строка, вызывающая массивы. Сортировка, которая в текущей версии Java вызывала бы только настроенную быструю сортировку или настроенную сортировку слиянием. Он не будет вызывать TimSort, поскольку он будет реализован в Java 7.

4. Итак, кто-нибудь знает полный исходный код, пожалуйста?

5. @Seva вы могли бы изменить это, чтобы оно работало, добавив «public» перед двумя методами, которые я перечислил, а затем изменив пакет на любой пакет, который вы хотите … затем вы могли бы вызвать TimSort.sort(myArray,myComparator);