Wyjaśnienie sortowania

0

Witam,

Wiem, że problem jest banalny, ale czy ktoś może mi łopatologicznie wytłumaczyć poniższy kod sortowania:

for (a = 0; a < wek3.length; a++){
	for (b = a; b < wek3.length; b++){
		if (wek3[a] > wek3[b]){
			wek_sort[a] = wek3[a];
			wek3[a] = wek3[b];
			wek3[b] = wek_sort[a];
		}
	}
	System.out.print(wek3[a] + " ");
}

Wszystko rozumiem oprócz pętli wewnętrznej. Po co ona jest? Dlaczego są dwie pętle?

0

Jest to sortowanie bąbelkowe. Masz tutaj dwie pętle, ponieważ algorytm zakłada, że żeby posortować tablicę musisz wielokrotnie porównać ze sobą sąsiadujące elementy. Jeżeli pierwszy jest większy od sąsiada, to zamieniają się miejscami. Kontynuujesz ten krok aż dojdziesz do końca tablicy. Po pierwszym przebiegu masz gwarancję, że pierwszy element jest najmniejszy, ale pozostała część tablicy nadal jest nieposortowana. Żeby mieć pewność posortowania całej tablicy, musisz ponownie dokonać porównania wszystkich elementów począwszy od drugiego, potem od trzeciego, czwartego itd. Po drugim przebiegu (porównaniu wszystkich elementów sąsiadujących ze sobą począwszy od drugiego elementu) masz gwarancję, że dwa pierwsze elementy są najmniejsze. Po trzecim przebiegu masz gwarancję co do trzech itd. Powtarzasz ten algorytm dla każdego kolejnego elementu, aż dojdziesz do końca tablicy, czyli złożoność obliczeniowa wyniesie O(n^2).

Jeżeli mój opis nadal nie jest jasny, wpisz w google "sortowanie bąbelkowe" i zobaczysz milion linków wraz z animacjami i przykładami.

0

Dzięki za wyjaśnienie, chyba lepiej się nie dało :) Teraz jest to wszystko jaśniejsze.

0

Ciesz się, że mogłem pomóc :) Powodzenia w dalszej nauce.

1 użytkowników online, w tym zalogowanych: 0, gości: 1