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