#java #sorting #timsort
#java #сортировка #timsort
Вопрос:
TimSort — это алгоритм, который будет использоваться по умолчанию в Java 7 для сортировки.
Я нашел этот источник, но я не понимаю, какой метод вызывать, поскольку все они являются частными. Кто-нибудь может понять? Спасибо.
Ответ №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 минут:
- http://pastebin.com/VNyUutiD — SortTest.java
- http://pastebin.com/deGAfWZj — TimSort.java
И результат:
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);