Metody sortowania
Transkrypt
Metody sortowania
Adam Zaborski – materiały pomocnicze – metody numeryczne Metody sortowania Metod sortowania jest wiele. Wybór zależy od wielkości zadania i ograniczeń sprzętowych. Do najprostszych metod należą: metoda wybierania, wstawiania i sortowanie bąbelkowe. Poniżej krótki opis, poglądowe rysunki i kod do matlaba. Metoda wybierania (ang. selection sort) (w pętli) tablicę możemy umownie podzielić na część już posortowaną i część jeszcze nieposortowaną przeszukując część nieposortowaną wybieramy odpowiedni element (najmniejszy czy największy, zależnie od tego czy sortujemy rosnąco czy malejąco) i wstawiamy go na kolejne miejsce (na koniec) części już posortowanej aby tego dokonać, po decyzji który element wybrać wstawiamy go w odpowiednie miejsce przesuwając elementy pomiędzy miejscem pierwotnym i docelowym w kierunku „luki” po elemencie za każdym razem ilość elementów części posortowanej rośnie o 1, więc wystarcza n takich przejść w pętli Metoda wstawiania (ang. insertion sort) (w pętli) tablicę możemy umownie podzielić na część już posortowaną i część jeszcze nieposortowaną bierzemy dowolny (pierwszy z brzegu) element z części nieposortowanej i określamy miejsce jego wstawienia w części już posortowanej aby tego dokonać, po wyborze miejsca wstawiania przesuwamy elementy pomiędzy miejscem pierwotnym i docelowym w kierunku „luki” po przestawianym elemencie za każdym razem ilość elementów części posortowanej rośnie o 1, więc wystarcza n takich przejść w pętli Sortowanie bąbelkowe (ang. bubblesort) (w pętli) porównujemy kolejne dwa elementy tablicy i jeśli ich kolejność jest niewłaściwa zamieniamy je miejscami, przechodzimy w ten sposób całą tablicę jest oczywiste, że po pierwszym przejściu przez całą tablicę ostatni element znajdzie się już na właściwym miejscu, po drugim przejściu – przedostatni i tak dalej, za każdym razem tablica do posortowania „skraca się” nam, wystarcza więc n takich przejść aby posortować całą tablicę praktycznym warunkiem zakończenia operacji sortowania jest wykonanie przejścia bez żadnej zamiany, co oczywiście oznacza że wszystkie elementy są już na właściwym miejscu Omówione metody obrazuje rysunek poniżej czy też demo z wikipedii, np. dla sortowania bąbelkowego:: http://web.engr.oregonstate.edu/~minoura/cs261/javaProgs/sort/ BubbleSort.html Adam Zaborski – materiały pomocnicze – metody numeryczne Adam Zaborski – materiały pomocnicze – metody numeryczne clear all clc format compact % zadana talica do posortowania a = [ -300, -2, 8, 4, -5, 3, 7, 122, 6, -7]; b = a; % zapisujemy pierwotne wartości dla kolejnych metod n = length(a) % metoda wybierania %------------------for i = 1: n min = i; for j = i + 1: n if (a(j) < a(min)) min = j; end end if (i ~= min) zamiana = a(i); a(i) = a(min); a(min) = zamiana; end end a % wydruk wyniku a = b; % przywracamy pierwotne wartości n = length(a) % metoda wstawiania %------------------for i = 2: n value = a(i); j = i - 1; while (j > 0 && a(j) > value) a(j + 1) = a(j); j = j - 1; end a(j + 1) = value; end a % wydruk wyniku a = b; % przywracamy pierwotne wartości n = length(a) % sortowanie bąbelkowe %---------------------zamiana = 1; while (zamiana) zamiana = 0; for i = 1: n - 1 if (a(i) > a(i+1)) aa = a(i+1); a(i + 1) = a(i); a(i) = aa; zamiana = 1; end end end a % wydruk wyniku