Sortowanie przez wstawianie Insertion Sort

Podobne dokumenty
Sortowanie Shella Shell Sort

Laboratorium nr 7 Sortowanie

Sortowanie bąbelkowe - wersja nr 1 Bubble Sort

liniowa - elementy następują jeden za drugim. Graficznie możemy przedstawić to tak:

Algorytmy sortujące i wyszukujące

Struktury Danych i Złożoność Obliczeniowa

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

[12] Metody projektowania algorytmów (dziel i rządź, programowanie dynamiczne i algorytmy zachłanne).

Programowanie w VB Proste algorytmy sortowania

Algorytmy sortujące. Sortowanie bąbelkowe

Metodyki i Techniki Programowania 2

wagi cyfry pozycje

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy sortujące. sortowanie kubełkowe, sortowanie grzebieniowe

Strategia "dziel i zwyciężaj"

PODSTAWY INFORMATYKI wykład 5.

Sortowanie. LABORKA Piotr Ciskowski

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Sortowanie przez scalanie

Algorytmy i Struktury Danych, 2. ćwiczenia

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

Sortowanie - wybrane algorytmy

WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński

Algorytm selekcji Hoare a. Łukasz Miemus

REKURENCJA W JĘZYKU HASKELL. Autor: Walczak Michał

. Podstawy Programowania 1. Sortowanie tablic jednowymiarowych. Arkadiusz Chrobot. 16 listopada 2016

Wstęp do programowania

Analiza algorytmów zadania podstawowe

Sortowanie. Bartman Jacek Algorytmy i struktury

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

INFORMATYKA SORTOWANIE DANYCH.

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Jeszcze o algorytmach

Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

znalezienia elementu w zbiorze, gdy w nim jest; dołączenia nowego elementu w odpowiednie miejsce, aby zbiór pozostał nadal uporządkowany.

Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Algorytmy i złożoność obliczeniowa. Wojciech Horzelski

Tablice cz. I Tablice jednowymiarowe, proste operacje na tablicach

Efektywna metoda sortowania sortowanie przez scalanie

Wykład z Technologii Informacyjnych. Piotr Mika

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

KONSPEKT ZAJĘĆ KOŁA INFORMATYCZNEGO LUB MATEMATYCZNEGO W KLASIE III GIMNAZJUM LUB I LICEUM ( 2 GODZ.)

Sortowanie przez wstawianie

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Temat: Algorytmy zachłanne

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Technologie cyfrowe. Artur Kalinowski. Zakład Cząstek i Oddziaływań Fundamentalnych Pasteura 5, pokój 4.15

Wstęp do Informatyki zadania ze złożoności obliczeniowej z rozwiązaniami

Podstawowe struktury danych

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Informatyka wprowadzenie do algorytmów (II) dr hab. inż. Mikołaj Morzy

lekcja 8a Gry komputerowe MasterMind

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

Anna Sobocińska Sylwia Piwońska

ALGORYTMY Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

7. Pętle for. Przykłady

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Rekurencja. Dla rozwiązania danego problemu, algorytm wywołuje sam siebie przy rozwiązywaniu podobnych podproblemów. Przykład: silnia: n! = n(n-1)!

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Algorytm. Krótka historia algorytmów

Sortowanie w czasie liniowym

B.B. 2. Sumowanie rozpoczynamy od ostatniej kolumny. Sumujemy cyfry w kolumnie zgodnie z podaną tabelką zapisując wynik pod kreską:

EGZAMIN MATURALNY Z INFORMATYKI. 10 maja 2017 POZIOM ROZSZERZONY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I

Jednym z najprostszych sposobów porządkowania jest technika stosowana przy sortowaniu listów:

Pętla for. Wynik działania programu:

Temat 7. Najlżejsze i najcięższe algorytmy sortowania

Materiały dla finalistów

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

FINCH PONG. Realizator: Partner: Patronat:

Przykładowe sprawozdanie. Jan Pustelnik

Zapisywanie algorytmów w języku programowania

Wykład 3. Metoda dziel i zwyciężaj

Luty 2001 Algorytmy (4) 2000/2001

2.8. Algorytmy, schematy, programy

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Algorytmy i struktury danych Matematyka III sem.

Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy

Podstawy Informatyki. Sprawność algorytmów

Luty 2001 Algorytmy (7) 2000/2001

Wprowadzenie do algorytmiki

Operacje arytmetyczne w systemie dwójkowym

Zasady analizy algorytmów

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI

PDF stworzony przez wersję demonstracyjną pdffactory Pro Program 15

Blockly Kodowanie pomoc.

UONET+ - moduł Sekretariat. Jak wykorzystać wydruki list w formacie XLS do analizy danych uczniów?

Pętle. Dodał Administrator niedziela, 14 marzec :27

Materiały: kartki papieru (5 x 5 kolorów), piłeczki pingpongowe (5 x 5 kolorów), worek (nieprzeźroczysty).

Opis problemu i przedstawienie sposobu jego rozwiązania w postaci graficznej. Gimnazjum nr 3 im. Jana Pawła II w Hrubieszowie 1

Algorytmy i Struktury Danych. (c) Marcin Sydow. Introduction. QuickSort. Sortowanie 2. Limit. CountSort. RadixSort. Summary

np. dla p=1 mamy T1(N) N/2 średni czas chybionego wyszukiwania z prawdopodobieństwem q:

Każde wykonanie bloku instrukcji nazywamy pojedynczym przebiegiem lub iteracją pętli.

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

WYŻSZA SZKOŁA INFORMATYKI STOSOWANEJ I ZARZĄDZANIA

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Transkrypt:

Sortowanie przez wstawianie Insertion Sort Algorytm sortowania przez wstawianie można porównać do sposobu układania kart pobieranych z talii. Najpierw bierzemy pierwszą kartę. Następnie pobieramy kolejne, aż do wyczerpania talii. Każdą pobraną kartę porównujemy z kartami, które już trzymamy w ręce i szukamy dla niej miejsca przed pierwszą kartą starszą (młodszą w przypadku porządku malejącego). Gdy znajdziemy takie miejsce, rozsuwamy karty i nową wstawiamy na przygotowane w ten sposób miejsce (stąd pochodzi nazwa algorytmu - sortowanie przez wstawianie, ang. Insertion Sort). Jeśli nasza karta jest najstarsza (najmłodsza), to umieszczamy ją na samym końcu. Tak porządkujemy karty. A jak przenieść tę ideę do świata komputerów i zbiorów liczbowych? Algorytm sortowania przez wstawianie będzie składał się z dwóch pętli. Pętla główna (zewnętrzna) symuluje pobieranie kart, czyli w tym wypadku elementów zbioru. Odpowiednikiem kart na ręce jest tzw. lista uporządkowana (ang. sorted list), którą sukcesywnie będziemy tworzyli na końcu zbioru (istnieje też odmiana algorytmu umieszczająca listę uporządkowaną na początku zbioru). Pętla sortująca (wewnętrzna) szuka dla pobranego elementu miejsca na liście uporządkowanej. Jeśli takie miejsce zostanie znalezione, to elementy listy są odpowiednio rozsuwane, aby tworzyć miejsce na nowy element i element wybrany przez pętlę główną trafia tam. W ten sposób lista uporządkowana rozrasta się. Jeśli na liście uporządkowanej nie ma elementu większego od wybranego, to element ten trafia na koniec listy. Sortowanie zakończymy, gdy pętla główna wybierze wszystkie elementy zbioru. Algorytm sortowania przez wstawianie posiada klasę czasowej złożoności obliczeniowej równą O(n 2 ). Sortowanie odbywa się w miejscu. Wstawianie elementu na listę uporządkowaną Najważniejszą operacją w opisywanym algorytmie sortowania jest wstawianie wybranego elementu na listę uporządkowaną. Zasady są następujące: 1. Na początku sortowania lista uporządkowana zawiera tylko jeden, ostatni element zbioru. Jednoelementowa lista jest zawsze uporządkowana. 2. Ze zbioru zawsze wybieramy element leżący tuż przed listą uporządkowaną. Element ten zapamiętujemy w zewnętrznej zmiennej. Miejsce, które zajmował, możemy potraktować jak puste. 3. Wybrany element porównujemy z kolejnymi elementami listy uporządkowanej.

4. Jeśli natrafimy na koniec listy, element wybrany wstawiamy na puste miejsce - lista rozrasta się o nowy element. 5. Jeśli element listy jest większy od wybranego, to element wybrany wstawiamy na puste miejsce - lista rozrasta się o nowy element. 6. Jeśli element listy nie jest większy od wybranego, to element listy przesuwamy na puste miejsce. Dzięki tej operacji puste miejsce wędruje na liście przed kolejny element. Kontynuujemy porównywanie, aż wystąpi sytuacja z punktu 4 lub 5. Przykład: Dla przykładu wstawmy wg opisanej metody pierwszy element zbioru listę uporządkowaną utworzoną z pozostałych elementów { }. Elementy listy uporządkowanej zaznaczyliśmy kolorem zielonym. Puste miejsce zaznaczyliśmy kolorem białym: Zbiór Opis operacji Element znajduje się tuż przed listą uporządkowaną. Wybieramy ze zbioru element. Zajmowane przez niego miejsce staje się puste. Porównujemy z pierwszym elementem listy uporządkowanej, z liczbą 4. 4 <<< 5 6 9 4 5 <<< 6 9 4 5 6 <<< 9 4 5 6 9 Ponieważ element 4 jest mniejszy od elementu wybranego, przesuwamy go na puste miejsce. Zwróć uwagę, iż puste miejsce wędruje w kierunku końca listy uporządkowanej. Porównujemy z kolejnym elementem listy uporządkowanej, z liczbą 5. 5 jest5 mniejsze od, zatem wędruje na puste miejsce, które przesuwa się przed kolejny element listy uporządkowanej, liczbę 6. Porównujemy z 6. 6 jest mniejsze od, wędruje na puste miejsce. Porównujemy z 9. Tym razem element wybrany wędruje na puste miejsce, ponieważ jest mniejszy od elementu 9 listy uporządkowanej. Operacja wstawiania jest zakończona. Lista rozrasta się o jeden element.

Przykład: Wykorzystajmy podane informacje do posortowania opisywaną metodą zbioru { 3 5 2 }. Zbiór Opis operacji 3 5 2 Ostatni element jest zalążkiem listy uporządkowanej. 5 3 2 5 3 2 5 3 2 <<< 3 2 5 3 2 5 3 2 5 3 2 <<< 5 3 2 5 3 2 5 <<< 3 2 5 3 2 5 3 2 5 3 2 <<< 5 Ze zbioru wybieramy element leżący tuż przed listą uporządkowaną. Wybrany element porównujemy z elementem listy. Ponieważ element listy jest mniejszy od elementu wybranego, to przesuwamy go na puste miejsce. Na liście nie ma już więcej elementów do porównania, więc element wybrany wstawiamy na puste miejsce. Lista uporządkowana zawiera już dwa elementy. Ze zbioru wybieramy porównujemy z 2 2 jest mniejsze, zatem przesuwamy je na puste miejsce. porównujemy z 5 5 jest mniejsze, przesuwamy je na puste miejsce Lista nie zawiera więcej elementów, zatem wstawiamy na puste miejsce. Na liście uporządkowanej mamy już trzy elementy. Ze zbioru wybieramy 3 3 porównujemy z 2 2 jest mniejsze, wędruje zatem na puste miejsce

3 2 5 2 3 5 3 porównujemy z 5. Tym razem mniejszy jest element wybrany. Znaleźliśmy jego miejsce na liście, więc wstawiamy go na puste miejsce. Lista zawiera już 4 elementy. 2 3 5 2 3 5 Ze zbioru wybieramy ostatni element - liczbę. porównujemy z 2 2 <<< 3 5 2 3 5 2 3 <<< 5 2 3 5 2 3 5 <<< 2 3 5 2 3 5 2 jest mniejsze, przesuwamy je na puste miejsce porównujemy z 3 3 jest mniejsze, przesuwamy je na puste miejsce porównujemy z 5 5 jest mniejsze, przesuwamy je na puste miejsce porównujemy z Element wybrany jest mniejszy, wstawiamy go na puste miejsce. Lista uporządkowana objęła już cały zbiór. Sortowanie jest zakończone. Specyfikacja problemu Dane wejściowe n d[ ] - liczba elementów w sortowanym zbiorze, n N - zbiór n-elementowy, który będzie sortowany. Elementy zbioru mają indeksy od 1 do n. Dane wyjściowe d[ ] - posortowany zbiór n-elementowy. Elementy zbioru mają indeksy od 1 do n. Zmienne pomocnicze

i, j - zmienne sterujące pętli, i, j N x - zawiera wybrany ze zbioru element. Lista kroków K01: Dla j = n - 1, n - 2,..., 1: wykonuj K02...K04 K02: x d[j]; i j + 1 K03: Dopóki ( i n ) ( x > d[i] ): wykonuj d[i - 1] d[i]; i i + 1 K04: d[i - 1] x K05: Zakończ Schemat blokowy

Pętlę główną rozpoczynamy od przedostatniej pozycji w zbiorze. Element na ostatniej pozycji jest zalążkiem listy uporządkowanej. Dlatego licznik pętli nr 1 przyjmuje wartość początkową j = n - 1. Ze zbioru wybieramy element d[j] i umieszczamy go w zmiennej pomocniczej x. Miejsce zajmowane przez ten element staje się puste. Uwaga techniczna W rzeczywistości na pozycji j pozostaje dalej ten sam element. Jednakże zapamiętaliśmy jego wartość, zatem pozycja ta może być zapisana inną informacją - elementu nie utracimy, ponieważ przechowuje go zmienna x. Dlatego pozycję tę możemy potraktować jako pustą, tzn. z nieistotną zawartością. Pętlę wewnętrzną rozpoczynamy od pozycji następnej w stosunku do j. Pozycja ta zawiera pierwszy element listy uporządkowanej, która tworzona jest na końcu sortowanego zbioru. Pętlę wewnętrzną przerywamy w dwóch przypadkach - gdy licznik pętli wyjdzie poza indeks ostatniego elementu w zbiorze lub gdy element wybrany, przechowywany w zmiennej pomocniczej x, jest mniejszy lub równy bieżąco testowanemu elementowi listy uporządkowanej (dla sortowania malejącego należy zastosować w tym miejscu relację większy lub równy). W obu przypadkach na puste miejsce ma trafić zawartość zmiennej x i pętla zewnętrzna jest kontynuowana. Zauważ, iż pozycja tego miejsca w zbiorze jest równa i - 1. Jeśli żaden z warunków przerwania pętli wewnętrznej nr 2 nie wystąpi, to przesuwamy bieżący element listy na puste miejsce i kontynuujemy pętlę wewnętrzną. Podsumowując: pętla zewnętrzna wybiera ze zbioru kolejne elementy o indeksach od n - 1 do 1, pętla wewnętrzna szuka dla wybranych elementów miejsca wstawienia na liście uporządkowanej, po znalezieniu którego pętla zewnętrzna wstawia wybrany element na listę. Gdy pętla zewnętrzna przebiegnie wszystkie elementy o indeksach od n - 1 do 1, zbiór będzie posortowany. Algorytm posiada klasę czasowej złożoności obliczeniowej równą O(n 2 ). Sortowanie odbywa się w miejscu.