W ramach szkolnego ćwiczenia chciałbym porównać i porównać algorytmy sortowania jako ćwiczenie Java.Sortowanie za drugim razem jest szybsze.
Ja sam zaimplementowałem algorytmy sortowania i sortujemy obiekty klasy Person
, które implementują interfejs Comparable
.
Jak dotąd tak dobrze, ale nie mogę wytłumaczyć, dlaczego podczas pierwszego połączenia z metodami sortowania sortowanie trwa dłużej niż przy kolejnych połączeniach?
Dane wyjściowe poniżej przedstawiają moje wyniki.
Best, najgorsze i Średnia odnoszą się do niesegregowanych tablicy, która jest przekazywana do metody Sortowanie:
- Najlepszy: tablica jest już posortowane
- Najgorszy: tablica jest posortowana w kolejności odwrotnej
- Średnia: obiekty w tablicy są w przypadkowej kolejności
to moje wyjście:
1-call of the sorting methods
InsertionSort Best:1799ms Worst:78ms Avg:789ms
MergeSort Best:10ms Worst:3ms Avg:5ms
2-call of the sorting methods
InsertionSort Best:1065ms Worst:39ms Avg:691ms
MergeSort Best:3ms Worst:2ms Avg:5ms
3-call of the sorting methods
InsertionSort Best:1066ms Worst:39ms Avg:692ms
MergeSort Best:3ms Worst:2ms Avg:5ms
4-call of the sorting methods
InsertionSort Best:1065ms Worst:39ms Avg:691ms
MergeSort Best:3ms Worst:2ms Avg:5ms
Czy JVM wykonuje optymalizacje w następnych połączeniach?
Jestem zdziwiony i bardzo doceniam każdą pomoc!
Edycja: Dziękujemy za sugestie i odpowiedzi do tej pory! Aby usunąć kilka punktów - każde z wywołań w moim wyjściu odnosi się do czasu potrzebnego na pełne sortowanie!
Po każdym sortowaniu ponownie wykonuję nowe połączenie z niezarządzanymi tablicami!
Mój kod źródłowy można pobrać jako projekt Zaćmienie jako plik zip, pod następującym linkiem: Dropbox dropbox link to eclipse project.zip
PS: Nie mam doświadczenia z profilerami - gdybyś mógł wskazać mi na samouczek lub coś takiego, byłoby wspaniale.
Czy możesz napisać kod? –
Czy ponownie przetasowałeś swoje dane pomiędzy kolejnymi przebiegami? – user1676075
Trudno powiedzieć bez żadnego kodu; i na przykład; może zależeć od tego, jak mierzysz. Istnieje wiele pułapek, które można napotkać w odniesieniu do pomiaru wydajności. Czasami na przykład kompilator Java na czas zajmuje ciekawe rzeczy. – GhostCat