Opracowano wiele metod sortowania (porządkowania) w kolejności rosnącej lub malejącej wartości w tablicy [Wirth, Knuth. t 3] Rozważmy trzy z nich, biorąc pod uwagę dla pewności, że pierwszych n, n=6 elementów tablicy X

W każdym kolejnym i-tym kroku i=2, 3,…,n-1 wartość z (i+1)-tej komórki tablicy przesuwana jest w kierunku zmniejszania indeksu komórki poprzez zamianę pozycji z liczbą z poprzedniej komórka aż Nie okaże się, że poprzednia komórka zawiera mniejszą liczbę.

Z powyższego wynika, że ​​przy wdrażaniu metody bezpośrednie połączenie Pętla zewnętrzna musi zostać wykonana n-1 razy, a maksymalna możliwa liczba wykonań pętli wewnętrznej, w treści której należy wykonać porównania i permutacje liczb, wzrośnie z 1 do n-1. Jednak pętlę wewnętrzną należy tak zorganizować, aby kończyła się lub w ogóle nie była wykonywana, gdy wystąpi warunek: wartość w poprzedniej komórce tablicy jest mniejsza niż w bieżącej.

W naszym przykładzie:

Gdy i=2, liczba 15 z komórki X 3 zamienia się kolejno miejscami z liczbą 34 z komórki X 2, a następnie z liczbą 21 z komórki X 1,

Gdy i=4, liczba 25 z komórki X 5 zamienia się miejscami z liczbą 34 z komórki X 3,

Poniżej fragment programu porządkującego rosnąco pierwszych n elementów tablicy X metodą włączenia bezpośredniego (włączenie z zachowaniem kolejności).

    dla i:=1 do n-1 wykonaj

  1. podczas gdy (X 0) zrobić

  2. R:=X[j];

    X[j]:=X;

    X:=R;

Aby uporządkować liczby w tablicy w kolejności malejącej, wystarczy na każdym kroku zmienić warunek permutacji liczb w sąsiednich komórkach tablicy na przeciwny, czyli zamiana wartości sąsiednich komórek zostanie dokonana w przypadek, gdy poprzednia jest mniejsza niż bieżąca.

Metoda wymiany bezpośredniej (metoda bąbelkowa).

Metoda ta, podobnie jak poprzednia, opiera się na wymianie wartości sąsiadujących komórek tablicy, jednak już od pierwszego kroku analizy sekwencyjnej, podczas przemieszczania się z jednego końca tablicy na drugi, wszystkie pary zaangażowane są sąsiednie komórki macierzy.

W pierwszym kroku sekwencyjnie dla j = n, n-1, ..., 2 porównuje się wartości sąsiadujących komórek tablicy i jeżeli warunek X j<Х j-1 выполняется их перестановка, в результате чего наименьшее число оказывается в ячейке Х 1 .

W naszym przykładzie po wykonaniu pierwszego kroku dane w tablicy będą ułożone w następujący sposób:

W każdym kolejnym kroku liczba sprawdzanych par komórek będzie zmniejszać się o 1. Generalnie w każdym kroku i, i=1, 2, 3, ..., n-1 proces będzie wykonywany dla j od w szczególności n do i+1 dla i= n-1 – tylko raz dla n-tej i (n-1)-tej komórki.

Z powyższego wynika, że ​​przy wdrażaniu metody bezpośredniej wymiany pętla zewnętrzna musi zostać wykonana n-1 razy, a liczba wykonań pętli wewnętrznej, w treści której należy wykonać porównania i przegrupowania liczb, zmniejszy się od n-1 do 1.

Pochodzenie terminu „metoda bąbelkowa” wyjaśniono w następujący sposób: jeśli wyobrazimy sobie pionowy układ komórek tablicowych ze wzrastającym indeksem od góry do dołu, wówczas najmniejsza liczba rozważanych uniesie się jak bańka w wodzie.

W naszym przykładzie

Gdy i=3 permutacje doprowadzą do następującego stanu tablicy

Przy stosowaniu metody bąbelkowej nie ma znaczenia, czy analiza par liczb w tablicy zmierza w kierunku indeksów rosnących, czy malejących, a o sposobie uporządkowania (rosnący lub malejący) decyduje jedynie warunek permutacji liczb (tzw. mniejszy powinien znajdować się za większym lub odwrotnie).

Zmodyfikowana metoda wymiany bezpośredniej (zmodyfikowana metoda bąbelkowa).

Jak widać z powyższego przykładu numerycznego, tablica okazała się uporządkowana po czwartym kroku, to znaczy możliwe jest wykonanie pętli zewnętrznej nie n-1 razy, ale mniej, gdy okaże się, że tablica jest już zamówione. Sprawdzenie to opiera się na następującym założeniu: jeśli podczas wykonywania pętli wewnętrznej nie było żadnych permutacji, to tablica jest już uporządkowana i można wyjść z pętli zewnętrznej. Zmienna typu Boolean służy jako znak, czy została wykonana permutacja: przed wejściem do pętli wewnętrznej nadawana jest jej jedna wartość, np. False, a po wykonaniu permutacji inna wartość, np. PRAWDA.

Oczywiście wpływ zastosowania zmodyfikowanej metody bąbelkowej w porównaniu z metodą niezmodyfikowaną na przyspieszenie procesu sortowania będzie można zaobserwować, jeśli pierwotny ciąg liczb będzie bliski uporządkowania w pożądanym kierunku. W skrajnym przypadku, gdy tablica jest już uporządkowana w pożądany sposób, treść zewnętrznej pętli zostanie wykonana tylko raz.

Metoda: Metoda pośredniego pomiaru zawartości wilgoci w substancjach, oparta na zależności stałej dielektrycznej tych substancji od ich zawartości wilgoci. Źródło: RMG 75 2004: Państwowy system zaopatrzenia w żywność...

KREW- KREW, płyn wypełniający tętnice, żyły i naczynia włosowate ciała, mający przezroczysty, bladożółty kolor. kolor osocza i tworzące się w nim elementy zawieszone: czerwone krwinki lub erytrocyty, białe lub leukocyty i płytki krwi lub ... Wielka encyklopedia medyczna

Nieruchomość- (Nieruchomości) 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 ubezpieczenia Treść - to rodzaj majątku, ...... Encyklopedia inwestorów

Ten termin ma inne znaczenia, patrz C. Zobacz też: C (język programowania) C++ Semantyka: wieloparadygmat: obiektowy, ogólny, proceduralny, metaprogramowanie Typ wykonania: skompilowany Pojawił się w... Wikipedia

OCENA WARTOŚCI WARTOŚCI NIEMATERIALNYCH- (pol. wycena wartości niematerialnych i prawnych) - określenie wartości wolumenu praw przedsiębiorstwa do określonego zespołu przedmiotów, które nie mają treści materialnej i nie generują dochodu dla przedsiębiorstwa w okresie określonym przez krajową... . .. Słownik encyklopedyczny finansów i kredytów

SZKOŁA edukacja ogólna- uch. będzie kształcić instytucja, uformował się podstawowy element. systemy. W tym charakterze Sh. jest przedmiotem badań. dyscypliny: pedagogika, historia, demografia, socjologia itp. Tylko w pedagogice problematyka nauki zajmuje całkowicie niezależną pozycję. miejsce. Wiedza... ... Rosyjska encyklopedia pedagogiczna

czas- 3.3.4 czas tE (czas tE): czas nagrzewania początkowym prądem przemiennym rozruchowym IA uzwojenia wirnika lub stojana od temperatury osiągniętej w nominalnym trybie pracy do temperatury dopuszczalnej w maksymalnej temperaturze otoczenia. Źródło … Słownik-podręcznik 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. Dokument oryginalny dotyczący wymagań ogólnych: Systemy zasilania TN Badania metodą 1 zgodnie z 18.2.2 można przeprowadzić dla każdego obwodu... ... Słownik-podręcznik terminów dokumentacji normatywnej i technicznej

automatyczny- 3.3.1 próbnik automatyczny: Urządzenie służące do uzyskania reprezentatywnej próbki cieczy przepływającej rurociągiem. Uwaga Automatyczny próbnik zwykle składa się z sondy, ekstraktora... ... Słownik-podręcznik terminów dokumentacji normatywnej i technicznej

Napięcie- 3.10 naprężenie: Stosunek siły rozciągającej do pola przekroju poprzecznego łącznika przy jego wymiarach nominalnych.

Ta metoda jest szeroko stosowana podczas gry w karty. Elementy (karty) dzielimy mentalnie na już „gotową” sekwencję A 1 , A 2 ,…, A i -1 oraz „pozostała” (nieposortowana) część: A i , A i +1 ,…, A N .

Istota metody polega na tym, że w każdym i-tym kroku (począwszy od i = 2) i-ty element jest usuwany z nieposortowanej części i umieszczany w części „gotowej”, natomiast wkładany jest do Właściwe miejsce.

Algorytm tekstowy metody:

1. Początek.

2. Zapętlaj, aż i będzie miał wartości od 2 do N,
krok = 1:

a) umieść i-ty element (A(i)) w komórce A(0);

b) przypisać j = -1, czyli j jest równe numerowi elementu znajdującego się na lewo od podmiotu (i-tego) i tym samym stojącego w sekwencji „gotowej”;

c) jeżeli A(0) ≥ A(j), to element A(0) należy umieścić w komórce A(j+1), w przeciwnym wypadku element A(j) należy umieścić w komórce A(j+1), zmniejszyć wartość j o jeden i ponownie wykonaj krok c.

Na ryc. Rysunek 1 przedstawia schemat blokowy sortowania metodą bezpośredniego włączenia.

Metoda działa w następujący sposób: w i-tym kroku (zaczynając od i = 2) i-ty element jest umieszczany w wolnej komórce (na przykład A(0)). Element ten porównywany jest z elementem stojącym w „gotowej” części po jego lewej stronie. Jeżeli element A(0) jest mniejszy, to porównywany (j-ty element) zostaje przesunięty w prawo o jedną pozycję, po czym do porównania zostaje wzięty kolejny element. Jeżeli element A(0) podczas porównywania nie jest mniejszy, to umieszcza się go w miejscu bezpośrednio za porównywanym elementem.

Ryż. 1. Schemat sortowania metodą włączenia bezpośredniego

Na ryc. Rysunek 2 przedstawia przykład wykonania sortowania metodą bezpośredniego włączenia.

Oryginalna sekwencja
A (0)
ja = 2
ja = 3
ja = 4
ja = 5
ja = 6
ja = 7
ja = 8
Wynik

Ryż. 2. Przykład bezpośredniego sortowania włączającego

Sortowanie bezpośrednie jest bardziej odpowiednie w przypadku, gdy posortowane dane docierają sekwencyjnie (jeden po drugim).

Bezpośrednie sortowanie przez wybór

Istota tej metody jest następująca. Wybierany jest najmniejszy element z „pozostałej” (nieposortowanej) części i zamieniany z pierwszym elementem (w tej samej nieposortowanej części). Następnie długość nieposortowanej części zmniejsza się o jeden element (pierwszy) i cały proces kontynuuje się z (n – 1) elementami, potem z (n – 2) elementami itd., aż zostanie tylko jeden po lewej stronie największy element.

Metoda ta jest w pewnym sensie przeciwieństwem metody bezpośredniego włączenia. W metodzie inkluzji bezpośredniej na każdym etapie uwzględniany jest tylko jeden kolejny element oraz wszystkie elementy już „gotowej” części ciągu, wśród których znajduje się punkt włączenia tego kolejnego elementu. Natomiast w metodzie selekcji bezpośredniej, aby znaleźć jeden (minimalny) element, przegląda się wszystkie elementy nieposortowanej części i ten minimalny element umieszcza się jako kolejny element w już „gotowej” części.

Algorytm tekstowy metody:

1. Początek.

2. Pętla aż i będzie miało wartości od 1 do N – 1,
krok = 1:

a) umieść bieżący (i-ty) element w jakiejś komórce pamięci (X) i zapamiętaj numer seryjny (i) bieżącego elementu (w zmiennej K);

b) wykonaj pętlę, podczas gdy j ma wartości od i + 1 (czyli od elementu obok i) do N, krok = +1:

treść pętli: jeśli X > A(j), to umieść element A(j) w komórce X i zapamiętaj jego numer w komórce K;

c) przypisz A(K) = A(i) i A(i) = X.

Na ryc. Rysunek 3 przedstawia przykład wykonania sortowania metodą selekcji bezpośredniej.

Oryginalna sekwencja 44 06
ja = 1 55 12
ja = 2 55 18
ja = 3 42 55
ja = 4 94 44
ja = 5 55 94
ja = 6 94 67
ja = 7

Ryż. 3. Przykład sortowania przez wybór bezpośredni

Sortowanie to uporządkowanie danych w pamięci w sposób regularny według wybranego parametru. Regularność rozumiana jest 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 lokalizacji w maszynie.

Wyróżnia się sortowanie wewnętrzne i zewnętrzne:

Sortowanie wewnętrzne - sortowanie pamięć o dostępie swobodnym;

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

Jeżeli sortowane rekordy zajmują dużą ilość pamięci, wówczas ich przenoszenie jest kosztowne. Aby je ograniczyć, sortowanie przeprowadza się w kluczowa tabela adresów, to znaczy zmieniają rozmieszczenie wskaźników, ale sama tablica się nie porusza. Ten - metoda sortowania tabeli adresów.

Podczas sortowania mogą pojawić się identyczne klucze. W takim przypadku wskazane jest, po posortowaniu, ułożenie tych samych kluczy w takiej samej kolejności, jak w pliku źródłowym.Ten - stabilne sortowanie.

Rozważymy tylko typy, które nie wymagają dodatkowej pamięci RAM. Takie rodzaje 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.

Podkreślmy pierwsze kryterium. Można uwzględnić ekwiwalent czasu spędzonego na sortowaniu ilość porównań I liczba ruchów podczas sortowania.

Kolejność liczby porównań i ruchów podczas sortowania mieści się 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 włączenia;

Metoda selekcji bezpośredniej;

Metoda wymiany bezpośredniej.

Skuteczność metod ścisłych jest w przybliżeniu taka sama.

Sortowanie bezpośrednie

Elementy są mentalnie dzielone na gotową sekwencję a 1,...,a i-1 oraz sekwencję pierwotną.

W każdym kroku, zaczynając od i = 2 i za każdym razem zwiększając i o jeden, wyodrębniamy pierwotną sekwencję i-ty element i jest przenoszony do gotowej sekwencji, podczas gdy jest wstawiany we właściwym miejscu.

Istota algorytmu jest następująca:

dla i = 2 do n

X = a(i)

Znajdujemy miejsce wśród a(1)…a(i) dla włączenia x

następny ja


Istnieją dwa algorytmy sortowania do przodu. Pierwsza bez bariery

Algorytm sortowania przez włączenie bezpośrednie bez bariery

dla i = 2 do n

X = a(i)

Dla j = i - 1 aż do 1

Jeśli x< a(j)

Wtedy a(j + 1) = a(j)

Inaczej idź do L

Endif

Następny j

L: a(j + 1) = x

następny ja

powrót

Wadą powyższego algorytmu jest naruszenie technologii programowanie strukturalne, w którym niepożądane jest stosowanie przejść bezwarunkowych. Jeśli pętla wewnętrzna jest zorganizowana jako pętla while, konieczne jest ustawienie „bariery”, bez której przy ujemnych wartościach klucza następuje utrata znaczenia i komputer „zawiesza się”.

Algorytm sortowania przez włączenie bezpośrednie z barierą

dla i = 2 do n

X = a(i)

A(0) = x (a(0) - bariera)

J = ja - 1

Podczas gdy x< a(j) do

A(j +1) = a(j)

J = j - 1

Na koniec

A(j +1) = x

następny ja

powrót

Efektywność algorytmu wyprzedzającego

Liczba kluczowych porównań Ci podczas i-tego przesiewania wynosi co najwyżej i-1, co najmniej 1; Jeśli założymy, że wszystkie permutacje N kluczy są jednakowo prawdopodobne, to średnia liczba porównań = i/2. Liczba przejść Mi=Ci+3 (wliczając barierę). Oszacowania minimalne występują w przypadku już uporządkowanego początkowego ciągu elementów, natomiast szacunki najgorsze występują, gdy są one początkowo ułożone w odwrotnej kolejności. W pewnym sensie sortowanie włączające wykazuje naprawdę naturalne zachowanie. Oczywiste jest, że powyższy algorytm opisuje proces sortowania stabilnego: kolejność elementów o równych kluczach pozostaje niezmieniona.

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

Sortowanie metodą wymiany bezpośredniej (sortowanie bąbelkowe)

W ta sekcja opisano metodę, w której charakterystyczną cechą procesu jest zamiana miejsc dwóch elementów. Opisany poniżej algorytm bezpośredniej wymiany opiera się na porównywaniu i zmianie miejsc dla pary sąsiednie elementy i kontynuowanie tego procesu, aż wszystkie elementy będą w porządku.

Powtarzamy przejścia przez tablicę, za każdym razem przesuwając najmniejszy element pozostałej sekwencji na lewy koniec tablicy. Jeśli pomyślimy o tablicach jak o konstrukcjach pionowych, a nie poziomych, wówczas elementy można zinterpretować jako bąbelki w kadzi z wodą, których waga odpowiada kluczowi. W takim przypadku przy każdym przejściu jedna bańka podnosi się do poziomu odpowiadającego jej wadze (patrz ilustracja na poniższym rysunku).

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

i w ogóle nie ma ruchu

Analiza porównawcza metod sortowania bezpośredniego pokazuje, że „sortowanie” wymienne w swojej klasycznej formie jest skrzyżowaniem sortowania za pomocą inkluzji i selekcji. Jeśli zostaną do niego wprowadzone powyższe ulepszenia, to dla wystarczająco uporządkowanych tablic sortowanie bąbelkowe ma nawet przewagę.

Metoda ta jest powszechnie znana jako sortowanie bąbelkowe.


Algorytm metody wymiany bezpośredniej

dla j = n do i krok -1

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

W naszym przypadku skończyliśmy z jedną pustą przepustką. Aby nie przeglądać elementów raz jeszcze, a co za tym idzie dokonywać porównań, poświęcając na to czas, możesz zaznaczyć checkbox fl, która pozostaje w wartości FAŁSZ, jeżeli podczas kolejnego przejazdu nie nastąpi żadna wymiana. W poniższym algorytmie dodatki zaznaczono pogrubioną czcionką.

fl = prawda

jeśli fl = false, to wróć

fl = fałsz

dla j = n do i krok -1

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

fl = prawda

Udoskonaleniem metody bąbelkowej jest sortowanie na wytrząsarce, gdzie po każdym przejściu następuje zmiana kierunku w pętli wewnętrznej.

Efektywność algorytmu sortowania metodą bezpośredniej wymiany

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

Liczba ruchów M max =3C max =3n(n-1)/2, rząd O(n 2).

Jeżeli tablica jest już posortowana i zastosowany jest algorytm z flagą to wystarczy jedno przejście i wtedy otrzymamy minimalną liczbę porównań

Ta metoda jest szeroko stosowana podczas gry w karty. Elementy (karty) dzielimy mentalnie na już „gotową” sekwencję A1…An i pierwotną sekwencję Ai…An. W każdym kroku, zaczynając od i=2 i zwiększając za każdym razem I o jeden, i-ty element jest wyodrębniany z pierwotnego ciągu i przenoszony do gotowego ciągu, po czym wstawiany jest w odpowiednie miejsce.

Powyżej pokazano jako przykład proces sortowania poprzez uwzględnienie ośmiu losowo wybranych liczb: Algorytm tego sortowania jest następujący:

FOR i:=2 DO n ZROBIĆ

włączenie x w odpowiednim miejscu wśród a… a[j];

W rzeczywistym procesie poszukiwania odpowiedniego miejsca wygodnie jest, naprzemiennie porównaniami i ruchami po sekwencji, przesiać X, czyli X porównuje się z kolejnym elementem aj, po czym albo X jest wstawiane do wolne miejsce lub aj zostaje przesunięty (przesłany) w prawo, a proces „idzie” w lewo. Należy pamiętać, że proces przesiewania może zakończyć się, jeśli spełniony zostanie jeden z dwóch poniższych warunków:

1. Znaleziono element aj z kluczem mniejszym niż klucz X.

2. Osiągnięto lewy koniec ukończonej sekwencji.

Ten typowy przypadek powtarzającego się procesu z dwoma warunkami zakończenia pozwala nam zastosować dobrze znaną technikę barierową (wartownik). Można to łatwo zastosować tutaj, ustawiając barierę a0 o wartości X. (Zauważ, że w tym celu konieczne jest rozszerzenie zakresu indeksu w opisie zmiennej a do 0…n.)

Analiza metody włączenia bezpośredniego. Liczba kluczowych porównań (Ci) podczas i-tego przesiewania jest co najwyżej równa i - 1, co najmniej 1; Jeśli założymy, że wszystkie permutacje n kluczy są jednakowo prawdopodobne, to średnia liczba porównań wynosi i/2. Liczba transferów (przypisań elementów) Mi jest równa Ci + 2 (wliczając barierę). Dlatego Łączna porównania i liczba transferów przedstawiają się następująco:

Zapisz = (n2 + n - 2)/4,

Cmax = (n2 + n - 4)/4,

M min = З*(n - 1),

M śr. = (n2 + 9n - 10)/4,

M maks. = (n2 + 3n - 4)/2.

Oszacowania minimalne występują w przypadku już uporządkowanego początkowego ciągu elementów, natomiast szacunki najgorsze występują, gdy są one początkowo ułożone w odwrotnej kolejności. W pewnym sensie sortowanie włączające wykazuje naprawdę naturalne zachowanie. Oczywiste jest, że powyższy algorytm opisuje proces sortowania stabilnego: kolejność elementów o równych kluczach pozostaje niezmieniona.

Algorytm z inkluzjami bezpośrednimi można łatwo ulepszyć, jeśli zwróci się uwagę na fakt, że gotowa sekwencja (a1 ... ai-1, do której należy wstawić nowy element, sam jest już zamówiony. Naturalne jest, że decydujemy się na wyszukiwanie binarne, w którym podejmowana jest próba porównania ze środkiem gotowej sekwencji, a następnie proces dzielenia na połowę trwa aż do znalezienia punktu włączenia. Ten zmodyfikowany algorytm sortowania nazywany jest metodą wstawiania binarnego.