Je cours Quicksort 10 fois et j'obtiens le temps moyen moyen. Je fais la même chose pour la combinaison de tri Qicksort/Insertion, et il semble être plus lent que le simple tri rapide.Quicksort/Insertion Trier le combo plus lentement que Quicksort?
est ici la partie du code où j'appelle InsertionSort
public static <T extends Comparable<? super T>> void OptQSort2 (T[] data, int min, int max) {
int indexofpartition;
if(max - min > 0) {
if((max - min) <= 10) {
// Use InsertionSort now
InsertionSort.sort(data);
return;
} else {
indexofpartition = findPartition(data, min, max);
OptQSort2(data, min, indexofpartition - 1);
OptQSort2(data, indexofpartition + 1, max);
}
}
}
Et la Quicksort régulière est la même chose que l'extrait ci-dessus, mais sans la condition if qui appelle InsertionSort.
FindPartition est la suivante:
public static <T extends Comparable<? super T>> int findPartition(T[] data, int min, int max) {
int left, right;
T temp, partitionelement;
int middle = (min + max)/2;
partitionelement = data[middle];
left = min;
right = max;
while(left < right) {
while(data[left].compareTo(partitionelement) <= 0 && left < right)
left++;
while(data[right].compareTo(partitionelement) > 0)
right--;
if(left < right) {
temp = data[left];
data[left] = data[right];
data[right] = temp;
}
}
Le temps moyen pour seulement Quicksort et OptSort2 (qui utilise le tri par insertion) sont
Sorted using QuickSort in: 3858841
Sorted using OptQSort2 in: 34359610
Toutes les idées pourquoi? La taille de la séquence est-elle importante? J'utilise un tableau Integer [] de 1000 éléments pour cela
Est-ce que 'InsertionSort.sort()' est implémenté récursif ou impératif? –
sans voir l'implémentation de QucikSort et InsertionSort c'est impossible à dire. –
C'est une disparité énorme et inattendue. Que fait exactement 'InsertionSort.sort'? –