I_P_W14_M11_Java Sortowanie przez wybieranie
Algorytm w pseudokodzie
Zanim przejdziemy do przełożenia opisanego algorytmu na język Java, przedstawimy go w postaci pseudokodu. Załóżmy, że sortujemy zbiór liczb w porządku rosnącym.
Użyjemy przy tym mechanizmu pętli zagnieżdżonych. Pierwsza z nich, zewnętrzna, będzie odpowiadać za wskazywanie kolejnych pozycji w tablicy. Zapełnimy je liczbami o coraz większych wartościach.
O tym, która liczba powinna znaleźć się w miejscu wskazanym przez zewnętrzną pętlę, poinformuje nas pętla wewnętrzna. Dzięki niej wyszukamy najmniejsze liczby w nieposortowanej części tablicy.
Zaczniemy od zdefiniowania zmiennych. Będzie nam potrzebna tablica zawierająca elementy do posortowania:
Następnie tworzymy pierwszą, zewnętrzną pętlę. Wskaże ona kolejne elementy tablicy oprócz ostatniego. Jeżeli poprzednie liczby zostaną ułożone we właściwym porządku, to ostatnia na pewno znajdzie się tam, gdzie być powinna.
Dla każdej wartości i należy przeszukać nieposortowaną część tablicy i znaleźć element, który powinien zostać umieszczony w miejscu wskazywanym przez zmienną i. W pierwszym cyklu będzie to pierwsze miejsce tablicy, w drugim drugie itd.
Zdefiniujemy teraz zmienną tymczasową najmniejszyIndeks. Ma ona wskazywać najmniejszy odnaleziony element; wstępnie przypiszemy jej wartość i. Zrobimy tak, ponieważ najmniejsza liczba od razu może znajdować się w miejscu wskazywanym przez zmienną i (w przypadku omówionej wcześniej przykładowej tablicy liczba 5 była tam, gdzie powinna zostać umieszczona).
Pora uruchomić pętlę wewnętrzną. Posłuży ona do odnalezienia najmniejszej liczby w nieposortowanej jeszcze części tablicy. Poszukiwania zaczną się od elementu o indeksie i + 1:
Aby znaleźć najmniejszy element, musimy porównać każdy obiekt w nieposortowanej części tablicy z najmniejszą odszukaną dotychczas liczbą:
Jeżeli okaże się, że sprawdzany właśnie element jest jeszcze mniejszy, uznajemy go za najmniejszą obecnie liczbę. Przenosimy ją na miejsce wskazane przez zmienną i. Oto gotowy algorytm zapisany w pseudokodzie:
Gdybyśmy chcieli natomiast posortować zbiór w porządku malejącym, należałoby wyszukiwać największe liczby w nieposortowanej części zbioru.