flagi
FLAGA POLSKA ( sortowanie „0-1”)
Sortowanie „0-1” polega na podzieleniu tablicy na dwa rozłączne podzbiory wypełniające
cała przestrzeń danych. Podział ten odbywa się przy jednokrotnym przejrzeniu całej tablicy.
O każdym elemencie tablicy wiemy jednoznacznie, do którego zbioru należy.
Przy założeniu, że w tablicy występują tylko 0 i 1, po posortowaniu flagą polską na
początku mają stać zera, a na końcu jedynki. Równie dobrze może to być podział zbioru na kobiety
i mężczyzn, liczby parzyste i nieparzyste, itp.
Ma ono złożoność liniową, dlatego nie opłaca się stosować do takiego typu zadań
klasycznych algorytmów sortujących (np. insertsort, quicksort).
Idea algorytmu:
Zmienna lewy_koniec pokazuje na pierwszy element w tablicy;
Zmienna prawy_koniec pokazuje na ostatni element w tablicy;
Dopóki zmienna lewy_koniec jest mniejsza od zmiennej prawy_koniec wykonujemy
następujące działania:
szukamy pierwszej jedynki z lewej strony (stojącej nie na swoim miejscu) – wskazuje na
nią zmienna lewy_koniec;
szukamy pierwszego zera z prawej strony (stojącego nie na swoim miejscu) – wskazuje
na nią zmienna prawy_koniec;
jeżeli zmienna lewy_koniec jest mniejsza od prawy_koniec, to dokonujemy zamiany
elementów stojących na pozycjach, na które wskazują te zmienne;
Przykład 1
Dana jest tablica A. Posortować ją flagą polską tak, aby na początku stały zera, a na końcu jedynki.
Szukamy z lewej strony pierwszej 1, a z prawej pierwszego 0:
1
2
3
4
5
6
7
8
9
0
1
1
0
1
1
0
1
0
i=1 i=2 j=9
ponieważ i<j, więc:
zamieniamy element z pozycji i=2 z elementem z pozycji j=9
zwiększamy indeks i, zmniejszamy indeks j.
Po zamianie mamy:
1
2
3
4
5
6
7
8
9
0
0
1
0
1
1
0
1
1
i=3 j=8
flagi
Dalej znowu szukamy z lewej strony pierwszej 1, a z prawej pierwszego 0:
1
2
3
4
5
6
7
8
9
0
0
1
0
1
1
0
1
1
i=3 j=7 j=8
ponieważ i<j, więc:
zamieniamy element z pozycji i=3 z elementem z pozycji j=7
zwiększamy indeks i, zmniejszamy indeks j:
Po zamianie mamy:
1
2
3
4
5
6
7
8
9
0
0
0
0
1
1
1
1
1
i=4 j=6
Dalej znowu szukamy z lewej strony pierwszej 1, a z prawej pierwszego 0:
1
2
3
4
5
6
7
8
9
0
0
0
0
1
1
1
1
1
i=4 i=5
j=5 j=6
Algorytm zakończy działanie, gdyż i>=j. Tablica jest już posortowana.
FLAGA FRANCUSKA ( sortowanie „0-1-2”)
Sortowanie „0-1-2” polega na podzieleniu tablicy na trzy rozłączne podzbiory wypełniające
cała przestrzeń danych. Podział ten odbywa się przy jednokrotnym przejrzeniu całej tablicy.
O każdym elemencie tablicy wiemy jednoznacznie, do którego zbioru należy.
Przy założeniu, że w tablicy występują tylko 0, 1 i 2, po posortowaniu flagą francuską na
początku mają stać zera, następnie jedynki, a na końcu dwójki.
Ma ono złożoność liniową, dlatego nie opłaca się stosować do takiego typu zadań
klasycznych algorytmów sortujących (np. insertsort, quicksort).