DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu

Metodę bezpośredniego wstawiania można ulepszyć, umieszczając wstawiony rekord w uporządkowanej podtabeli za pomocą tej metody dwójkowy (dychotomiczny, binarny, logarytmiczny) Szukaj. Ta modyfikacja metody wstawiania nosi nazwę wstawić z włączeniem binarnym.

Rozważać jot-Ten krok sortowania ( jot=2, 3, ..., n). Jeśli K.[ jot]>= K.[ jot-1] , to zamówienie nie jest naruszane i należy udać się do R[ jot+1]– oh rekord. Jeśli K.[ jot]< K.[ jot-1] następnie R[ jot] zapamiętane w zmiennej roboczej (Rab= R[ jot]) i szuka się dla niego miejsca w uporządkowanej części stołu - w podtabeli. Oznaczmy dolną granicę indeksu tej podtabeli przez ng, górny - przelotowy bd (pierwotnie ng=1. bd\u003d j-1).

Według klucza wyszukiwania binarnego K.[ jot] dany rekord R[ jot] należy najpierw porównać z kluczem K.[ ja] dokumentacja R[ ja] w środku uporządkowanej podtabeli (i \u003d (ng + vg) dział 2)... Jeśli K.[ jot]> K.[ ja], następnie lewa strona podtabeli jest odrzucana (czyli nie jest już brana pod uwagę) - rekordy z mniejszymi kluczami (ng= ja+1) ... Jeśli K.[ jot]< K.[ ja] , następnie prawa strona podtabeli jest odrzucana - rekordy z dużymi kluczami (bd= ja-1). Poszukiwanie jest kontynuowane w pozostałej części podtabeli. Proces dzielenia części podtabeli na pół trwa do momentu wystąpienia jednej z następujących sytuacji:

1) K.[ jot]= K.[ ja] , W związku z tym, (i + 1)-Ta pozycja to lokalizacja danego wpisu. Przenieś rekordy R[ ja+1], R[ ja+2], …, R[ jot-1] jedną pozycję w prawo, a tym samym zwolnić miejsce na włożenie (R[ ja+1]= Rab).

2) K.[ jot]<> K.[ ja] i ng> bd - klawisze nie pasują do siebie, a długość ostatniej podtabeli wynosi 1. W tym przypadku miejscem wstawienia jest pozycja ng, dlatego zapisy R[ ng], R[ ng+1], … , R[ jot-1] należy przesunąć o jedną pozycję w prawo (R[ ng]= Rab) .

Algorytm wyszukiwania binarnego został szczegółowo opisany w sekcji „Dychotomiczne wyszukiwanie koincydencji”.

Rozważmy przykład jot-ty krok sortowania (ustalane jest miejsce rekordu z kluczem 9; jot=7, K.[ jot]=9 ):

Średnia liczba porównań dla tej metody to n log 2 (n).

Dwukierunkowa metoda wstawiania

Dwukierunkowa metoda wstawiania jest modyfikacją metody bezpośredniego wstawiania; poprawia wydajność sortowania.

Do zaimplementowania tej metody wymagana jest dodatkowa pamięć równa ilości zajmowanej przez sortowaną tabelę (nazwijmy to strefą wyjściową T). W pierwszym kroku sortowania do środka obszaru wyjściowego (pozycja m \u003d (n dział 2) +1) umieszcza się pierwszy rekord tabeli R. Inne pozycje T gdy jest pusty. Na kolejnych etapach sortowania klucz do kolejnego rekordu R[ jot] (jot=2, 3, …, n) jest porównywana z kluczem zapisu T[ m] oraz, w zależności od wyników porównania, miejsce na R[ jot] znalezione w T lewo lub prawo od T[ m] metodą wstawiania. W tym przypadku liczby skrajnego lewego ( l) i prawy ( r) zawarte w obszarze wyjściowym elementów. Wartości końcowe li rsą równe 1 i n odpowiednio.

Algorytm powinien również uwzględniać następujące sytuacje:

    wpisz klucz R [j] mniej klucza zapisu T [m]ale l \u003d 1;

    wpisz klucz R [j] więcej klawisz zapisu T [m]ale r \u003d n.

W takich przypadkach, aby wstawić rekord R[ jot] konieczne jest przesunięcie zapisów podtabeli razem z rekordem T[ m] prawo lub lewo (przy użyciu metody bezpośredniego wstawiania).

Spójrzmy na przykład sortowania za pomocą tej metody.

Niech oryginalna sekwencja kluczy tabeli ma postać:

24, 1, 28, 7, 25, 3, 6, 18, 8 (n=9, m=(n div 2)+ 1=5)

Numer kroku

Strefa wycofania

Sortowanie włączające, takie jak proste sortowanie przez wybór, jest zwykle używane w przypadku tablic, które nie zawierają zduplikowanych elementów.

Sortowanie metodą bezpośredniego włączania, podobnie jak wszystkie opisane powyżej, odbywa się etapami. Na k-tym kroku przyjmuje się, że część tablicy zawierająca pierwsze elementy k-1 jest już uporządkowana, czyli

a ≤ a ≤ ... ≤ a.

Następnie należy wziąć k-ty element i wybrać dla niego miejsce w posortowanej części tablicy tak, aby po jego wstawieniu porządek nie został zakłócony, czyli trzeba znaleźć takie j (1 ≤ j ≤ k -1) takie, że a [j] ≤ a [ k]< a. Затем вставить элемент а [k] на найденное место.

Z każdym krokiem posortowana część tablicy rośnie. Pełne sortowanie wymaga n-1 kroków.

Rozważmy ten proces na przykładzie. Załóżmy, że chcesz posortować tablicę 10 elementów w porządku rosnącym metodą bezpośredniego włączania

1 - krok

13 6 8 11 3 1 5 9 15 7 Rozważmy część tablicy jednego elementu

ment (13). Musisz włożyć do niego sekundę

element array (6) tak, aby plik order

została zachowana. Od 6< 13, вставляем

6 na pierwszym miejscu. Posortowana część

tablica zawiera dwa elementy (6 13).


3 - krok

6 8 13 11 3 1 5 9 15 7 Następnym elementem jest 11. Jest on zapisywany w uporządkowanej części tablicy na trzecim miejscu, ponieważ 11\u003e 8, ale 11< 13.


5 - krok

3 6 8 11 13 1 5 9 15 7 Z tego samego powodu piszemy 1 do pierwszego


6 - krok

1 3 6 8 11 13 5 9 15 7 Ponieważ 5\u003e 3, ale 5< 6 то место 5 в упоря-

Część podrzędna jest trzecią.


7 - krok

1 3 5 6 8 11 13 9 15 7 Miejsce cyfry 9 jest szóste.


8 - krok

1 3 5 6 8 9 11 13 15 7 Określ miejsce na przedostatni

Element 15. Okazuje się, że ten element

policjant w tablicy jest już na miejscu.

9 - krok

1 3 5 6 8 9 11 13 15 7 Pozostaje znaleźć odpowiednie miejsce

Ostatnia pozycja (7).

1 3 5 6 7 8 9 11 13 15 Tablica jest całkowicie posortowana.

Teraz możemy pokrótce opisać fragment algorytmu sortowania metodą bezpośredniego włączenia:



Dla k: \u003d 2 To n Do

(ponieważ zaczynamy sortowanie od znalezienia odpowiedniego miejsca na a, i zmienia się z 2 na n)

„Wstaw x w odpowiednim miejscu a, ..., a [k]”

Pozostaje odpowiedzieć na pytanie, jak znaleźć odpowiednie miejsce dla elementu x. Zróbmy co następuje: przejrzymy elementy znajdujące się na lewo od x (czyli te, które są już uporządkowane), przechodząc na początek tablicy. Konieczne jest zeskanowanie elementów a [j], j waha się od k-1 do 1. Takie skanowanie musi się zakończyć, gdy zostanie spełniony jeden z następujących warunków:

· Znaleziony element a [j]< x, что говорит о необходимости вставки x между a и a[j].

· Lewy koniec uporządkowanej części tablicy został osiągnięty, dlatego należy wstawić x na pierwszym miejscu.

Dopóki jeden z tych warunków nie zostanie spełniony, będziemy przesuwać oglądane elementy na pierwszą pozycję w prawo, w wyniku czego miejsce w posortowanej części zostanie zwolnione o x.

Program bezpośredniego sortowania:

program n3; (Sortuj malejąco)

wpisz ar \u003d tablica liczb całkowitych;

sortowanie procedur3 (var a: ar);

var i, j, x, k: liczba całkowita;

dla k: \u003d 2 do n zrobić

x: \u003d a [k]; j: \u003d k-1;

podczas gdy (j\u003e 0) i (x\u003e \u003d a [j]) do

writeln ("Podaj oryginalną tablicę:");

dla i: \u003d 1 do n czytać (a [i]);

writeln ("Posortowana tablica:");

dla i: \u003d 1 do n napisz (a [i], „”);

Niezbędne definicje i klasyfikacja sortowań.

Sortowanie. Niezbędne definicje i klasyfikacja sortowań. Bezpośrednie włączanie i selekcja. Ich skuteczność

Sortowanie To uporządkowanie danych w pamięci w regularnej formie zgodnie z ich kluczami. Dlatego podczas przetwarzania danych ważna jest znajomość pola informacyjnego danych i ich rozmieszczenia w maszynie. Dlatego rozróżnij wewnętrzny (sortowanie w pamięci RAM) i sortowanie zewnętrzne (sortowanie w pamięci zewnętrznej). Prawidłowość rozmieszczenie elementów to zwiększenie (zmniejszenie) wartości klucza od początku do końca w tablicy.

Jeśli sortowane rekordy zajmują dużo pamięci, przenoszenie ich jest kosztowne. Aby je zmniejszyć, użyj metoda sortowania tabeli adresów... Ta metoda jest używana w kluczowa tabela adresów... Wskaźniki są przestawione, tj. Sama tablica nie porusza się. Podczas sortowania mogą być identyczne klucze. W takim przypadku pożądane jest ułożenie identycznych kluczy po sortowaniu w tej samej kolejności, jak w pliku źródłowym. Ta zasada jest używana do zrównoważone sortowanie.

Efektywność sortowania można ocenić na podstawie kilku kryteriów:

1) czas spędzony na sortowaniu;

2) ilość pamięci RAM potrzebnej do sortowania;

3) czas spędzony przez programistę na napisaniu programu.

Czas sortowania jest proporcjonalny do liczby porównań podczas sortowania i liczby przeniesionych elementów.

Uważa się, że kolejność numerów porównawczych podczas sortowania może mieścić się w zakresie od o (nlogn) przed o (nr 2)gdzie o (n) - przypadek idealny i nieosiągalny.

Metody sortowania można sklasyfikować mniej więcej tak:

1) metody ścisłe (bezpośrednie) (ich skuteczność jest mniej więcej taka sama):

· bezpośrednie włączenie;

· bezpośredni wybór;

· bezpośrednia wymiana;

2) ulepszone techniki.

W życiu zasada tego sortowania jest obecna podczas grania w pasjansa, sprzątania mieszkania, gdy konieczne jest ułożenie kilku mieszanych rzeczy w odpowiedniej kolejności itp. Do porządkowania danych zastosowano bardzo naturalną metodę sortowania.

Elementy są mentalnie podzielone na gotową sekwencję a 1, ..., a i-1 i oryginalną sekwencję. W gotowej kolejności elementy są ułożone w określonej kolejności (malejąco lub rosnąco). Oryginalna sekwencja zawiera elementy, które należy posortować. Na każdym kroku elementy oryginalnej sekwencji są zmniejszane o jeden, a gotowa jest zwiększana o jeden. Wynika to z faktu, że z oryginalnej sekwencji jest wydobywany ja-th element i przeniesiony do gotowej sekwencji, podczas gdy jest wstawiany w odpowiednim miejscu wśród elementów gotowej sekwencji.

Rozważmy przykład sortowania metodą bezpośredniego włączania na sekwencji elementów: 10, 3, 11, 8, 2, 15, 44, 9 (Tabela 11.1). Konieczne jest sortowanie w kolejności rosnącej.

Na początku gotowa sekwencja nie zawiera elementów. W pierwszym kroku pierwszy element oryginalnej sekwencji, czyli 10, staje się pierwszym elementem gotowej sekwencji. Następnie drugi krok: element 3 z oryginalnej sekwencji jest umieszczany w gotowym. Tak to wygląda. Jeśli element jest większy niż 10, to pozostaje na swoim miejscu, a jeśli jest mniejszy, to 10 jest przesuwane o jeden w prawo i element jest umieszczany na swoim miejscu. Od 3<10, то готовая последовательность теперь будет иметь вид: 3, 10, а исходная – 11, 8, 2, 15, 44, 9. Далее на третьем шаге из исходной последовательности выбирается 11 и помещается в готовую последовательность. Сначала 11 сравнивается с 10, и так как 11>10, a następnie 11 pozostaje na miejscu. Oryginalna sekwencja to teraz: 8, 2, 15, 44, 9. Kolejne kroki są wykonywane w ten sam sposób.

Tabela 11.1

Jak działa sortowanie bezpośrednie

Liczba kroków w tym sortowaniu (tabela 11.1) jest równa liczbie elementów w posortowanej kolejności, tj. 8 stopni \u003d 8 elementów.

Istnieją dwa sposoby wdrożenia tej metody - bez szlabanu (rysunek 11.1) iz barierą (rysunek 11.2).

Sortowanie to uporządkowanie danych w pamięci w regularnej formie zgodnie z wybranym parametrem. Regularność jest rozumiana jako wzrost (spadek) wartości parametru od początku do końca tablicy danych.

Podczas przetwarzania danych ważna jest znajomość pola informacyjnego danych i ich rozmieszczenia w maszynie.

Rozróżnij sortowanie wewnętrzne i zewnętrzne:

Sortowanie wewnętrzne - sortowanie w pamięci RAM;

Sortowanie zewnętrzne - sortowanie w pamięci zewnętrznej.

Jeśli sortowane rekordy zajmują dużo pamięci, przenoszenie ich jest kosztowne. Aby je zredukować, przeprowadzane jest sortowanie kluczowa tabela adresówoznacza to, że wskaźniki są przestawiane, ale sama tablica nie jest przenoszona. To - metoda sortowania tabeli adresów.

Podczas sortowania można napotkać te same klucze. W takim przypadku po posortowaniu wskazane jest ułożenie tych samych kluczy w takiej samej kolejności, jak w pliku źródłowym.To - zrównoważone sortowanie.

Rozważymy tylko te rodzaje, które nie używają dodatkowej pamięci RAM. Takie sortowania nazywane są "w tym samym miejscu".

Efektywność sortowania można rozpatrywać według kilku kryteriów:

Czas spędzony na sortowaniu;

Ilość pamięci RAM wymagana do sortowania;

Czas spędzony przez programistę na pisaniu programu.

Wybierzmy pierwsze kryterium. Można rozważyć ekwiwalent czasu spędzonego na sortowaniu liczba porównań i liczba ruchówpodczas sortowania.

Kolejność liczby porównań i ruchów podczas sortowania leży w granicach

Od O (n log n) do O (n 2);

O (n) jest przypadkiem idealnym i nieosiągalnym.

Wyróżnia się następujące metody sortowania:

Metody ścisłe (bezpośrednie);

Ulepszone metody.

Ścisłe metody:

Metoda bezpośredniego połączenia;

Metoda bezpośredniego wyboru;

Metoda bezpośredniej wymiany.

Skuteczność rygorystycznych metod jest mniej więcej taka sama.

Sortuj według metody bezpośredniego włączania

Elementy są mentalnie podzielone na gotową sekwencję a 1, ..., a i-1 oraz sekwencję oryginalną.

Na każdym kroku, zaczynając od i \u003d 2 i zwiększając i za każdym razem o jeden, i-ty element jest wyodrębniany z pierwotnej sekwencji i przenoszony do gotowej sekwencji, podczas gdy jest wstawiany w żądane miejsce.

Istota algorytmu jest następująca:

dla i \u003d 2 do n

X \u003d a (i)

Znajdź miejsce wśród (1) ... a (i), aby uwzględnić x

następny i


Istnieją dwa algorytmy sortowania bezpośredniego. Pierwsza jest bez bariery

Algorytm sortowania z bezpośrednim włączeniem bez barier

dla i \u003d 2 do n

X \u003d a (i)

Dla j \u003d i - 1 w dół do 1

Jeśli x< a(j)

Wtedy a (j + 1) \u003d a (j)

W przeciwnym razie przejdź do L.

Endif

Następny j

L: a (j + 1) \u003d x

następny i

powrót

Wadą powyższego algorytmu jest naruszenie technologii programowania strukturalnego, w której niepożądane jest stosowanie skoków bezwarunkowych. Jeśli pętla wewnętrzna jest zorganizowana jako pętla while, to konieczne jest ustawienie „bariery”, bez której przy ujemnych wartościach kluczy następuje utrata znaczenia i „zamrożenie” komputera.

Algorytm bezpośredniego sortowania wtrąceń z barierą

dla i \u003d 2 do n

X \u003d a (i)

A (0) \u003d x (a (0) - bariera)

J \u003d i - 1

Podczas gdy x< a(j) do

A (j +1) \u003d a (j)

J \u003d j - 1

W końcu

A (j +1) \u003d x

następny i

powrót

Wydajność algorytmu bezpośredniego włączenia

Liczba kluczowych porównań Ci w i-tym badaniu przesiewowym wynosi co najwyżej i-1, co najmniej 1; jeśli przyjmiemy, że wszystkie permutacje N kluczy są jednakowo prawdopodobne, to średnia liczba porównań \u003d i / 2. Liczba przesiadek Mi \u003d Ci + 3 (łącznie z szlabanem). Minimalne wyniki znajdują się w przypadku już uporządkowanej początkowej sekwencji elementów, podczas gdy najgorsze wyniki występują, gdy są one początkowo rozmieszczone w odwrotnej kolejności. W pewnym sensie sortowanie włączające jest prawdziwie naturalnym zachowaniem. Oczywiste jest, że podany algorytm opisuje proces stabilnego sortowania: kolejność elementów o równych kluczach pozostaje niezmieniona.

Liczba porównań w najgorszym przypadku, gdy tablica jest posortowana w odwrotny sposób, C max \u003d n (n - 1) / 2, czyli - O (n 2). Liczba permutacji M max \u003d C max + 3 (n-1), tj. - O (nr 2). Jeśli tablica jest już posortowana, to liczba porównań i permutacji jest minimalna: C min \u003d n-1; M min \u003d \u003d 3 (n-1).

Sortuj za pomocą wymiany bezpośredniej (sortowanie bąbelkowe)

W tej sekcji opisano metodę, w której charakterystyczną cechą procesu jest zamiana miejsc dwóch elementów. Opisany poniżej algorytm wymiany bezpośredniej polega na porównywaniu i zamianie miejsc dla pary sąsiednich elementów i kontynuowaniu tego procesu, aż wszystkie elementy będą uporządkowane.

Iterujemy po tablicy, za każdym razem przesuwając najmniejszy element pozostałej sekwencji na lewy koniec tablicy. Jeśli weźmiemy pod uwagę tablice jako struktury pionowe, a nie poziome, wówczas elementy można zinterpretować jako bąbelki w kadzi z wodą, a waga każdego odpowiada jego kluczowi. W tym przypadku przy każdym przejściu jeden bąbelek podnosi się do poziomu odpowiadającego jego wadze (patrz ilustracja na poniższym rysunku).

C min \u003d n - 1, rząd O (n),

i nie ma żadnych ruchów

Analiza porównawcza bezpośrednich metod sortowania pokazuje, że „sortowanie” wymienne w klasycznej formie jest skrzyżowaniem sortowania za pomocą inkluzji i za pomocą selekcji. Dzięki powyższym ulepszeniom sortowanie bąbelkowe ma nawet przewagę w przypadku rozsądnie uporządkowanych tablic.

Ta technika jest powszechnie znana jako sortowanie bąbelkowe.


Algorytm metody bezpośredniej wymiany

dla j \u003d n do i kroku -1

jeśli a (j)< a(j - 1) then

W naszym przypadku otrzymaliśmy jeden przebieg „bezczynny”. Aby nie przeglądać ponownie elementów, a co za tym idzie dokonywać porównań, poświęcając na to czas, można zaznaczyć checkbox flco pozostaje w znaczeniu fałszywejeśli nie dokonano wymiany podczas następnego przejazdu. W poniższym algorytmie dodatki zaznaczono pogrubioną czcionką.

fl \u003d prawda

jeśli fl \u003d false to wróć

fl \u003d false

dla j \u003d n do i kroku -1

jeśli a (j)< a(j - 1) then

fl \u003d prawda

Udoskonaleniem metody bąbelkowej jest sortowanie na wytrząsarce, w którym po każdym przejściu kierunek jest odwracany w pętli wewnętrznej.

Wydajność algorytmu bezpośredniego sortowania wymiany

Liczba porównań C max \u003d n (n-1) / 2, rząd O (n 2).

Liczba przemieszczeń M max \u003d 3C max \u003d 3n (n-1) / 2, rząd O (n 2).

Jeśli tablica jest już posortowana i zastosowano algorytm z flagą, to wystarczy jedno przejście, a wtedy otrzymujemy minimalną liczbę porównań

Metoda: Metoda pośredniego pomiaru wilgotności substancji oparta na zależności stałej dielektrycznej tych substancji od ich wilgotności. Źródło: RMG 75 2004: Państwowy system zapewnienia uni ...

KREW - KREW, płyn, który wypełnia tętnice, żyły i naczynia włosowate ciała i składa się z przezroczystego, bladożółtego. kolor plazmy i zawieszonych w niej pierwiastków: czerwone krwinki, czyli erytrocyty, białe lub leukocyty i płytki krwi, lub ... Duża encyklopedia medyczna

Własność - (Nieruchomość) Definicja nieruchomości, rodzaje nieruchomości, wynajem i sprzedaż nieruchomości Informacje o pojęciu nieruchomości, rodzaje nieruchomości, wynajem i sprzedaż nieruchomości, podatki i ubezpieczenie Treść to rodzaj nieruchomości, ... ... Encyklopedia inwestorów

Termin ten ma inne znaczenie, patrz C. Zobacz także: C (język programowania) C ++ Semantyka: wieloparadygmatyczny: obiektowy, ogólny, proceduralny, metaprogramowanie Typ wykonania: kompilowany Wprowadzony w ... Wikipedia

WYCENA WARTOŚCI WARTOŚCI NIEMATERIALNYCH - (angielska wycena wartości niematerialnych) - ustalenie wartości zakresu praw przedsiębiorstwa do określonej grupy przedmiotów, które nie mają materialnej treści i przynoszą dochód przedsiębiorstwu w okresie wskazanym przez ... ... Słownik encyklopedyczny finansów i kredytów

Szkolnictwo ogólne - uch. kształcić. instytucja, podstawowym elementem jest wykształcenie. systemy. W tym charakterze Sh. Przedmiot badań dekompresji. dyscypliny: ped., historia., demograf., socjologia itp. Tylko w pedagogice problemy Sh. są całkowicie niezależne. miejsce. Wiedza, umiejętności ... ... Rosyjska encyklopedia pedagogiczna

czas - 3.3.4 czas tE (czas tE): czas nagrzewania przez początkowy rozruchowy prąd przemienny IA uzwojenia wirnika lub stojana od temperatury osiągniętej przy pracy znamionowej do temperatury dopuszczalnej przy maksymalnej temperaturze otoczenia. Źródło … Słownik-leksykon terminów dokumentacji normatywnej i technicznej

GOST R IEC 60204-1-2007: Bezpieczeństwo maszyn. Wyposażenie elektryczne maszyn i mechanizmów. Część 1. Wymagania ogólne - Terminologia GOST R IEC 60204 1 2007: Bezpieczeństwo maszyn. Wyposażenie elektryczne maszyn i mechanizmów. Część 1. Wymagania ogólne Dokument oryginalny: Systemy zasilania TN Metoda badania 1 zgodnie z 18.2.2 może być przeprowadzona dla każdego obwodu ... ... Słownik-leksykon terminów dokumentacji normatywnej i technicznej

automatyczny - 3.3.1 automatyczne urządzenie do pobierania próbek służące do pobierania reprezentatywnej próbki cieczy przepływającej przez rurociąg Uwaga Podajnik automatyczny składa się zwykle z sondy (bagnetu), ekstraktora ... ... Słownik-leksykon terminów dokumentacji normatywnej i technicznej

napięcie - naprężenie 3.10: stosunek siły rozciągającej do pola przekroju poprzecznego ogniwa w jego wymiarach nominalnych

DZWON

Są tacy, którzy czytają tę wiadomość przed tobą.
Zapisz się, aby otrzymywać najnowsze artykuły.
E-mail
Imię
Nazwisko
Jak chcesz przeczytać The Bell
Bez spamu