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

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

Wykład 7 Abstrakcyjne typy danych słownik (lista symboli)

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

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Wykład 5_2 Algorytm ograniczania liczby serii za pomocą kopcowego rozdzielania serii początkowych

Wykład 1 Wprowadzenie do algorytmów. Zawartość wykładu 1. Wstęp do algorytmów i struktur danych 2. Algorytmy z rozgałęzieniami.

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

Matematyczne Podstawy Informatyki

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Etap 2 - Budowa interfejsu. typedef struct ELEMENT* stos; struct ELEMENT { dane Dane; stos Nastepny; }; struct kolejka { stos Poczatek, Koniec; };

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

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

tablica: dane_liczbowe

Podstawy Informatyki. Sprawność algorytmów

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Szablony klas, zastosowanie szablonów w programach

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

1 Podstawy c++ w pigułce.

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Sortowanie przez wstawianie

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

Strategia "dziel i zwyciężaj"

Programowanie Proceduralne

Instrukcje sterujące. Programowanie Proceduralne 1

Poprawność semantyczna

Analiza algorytmów zadania podstawowe

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Wstęp do Informatyki

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Podstawy Programowania C++

Programowanie Proceduralne

Podstawy programowania C. dr. Krystyna Łapin

Wyklad 7 Funkcje (c.d.). Tablice jednowymiarowe znaków

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Proste programy w C++ zadania

Podstawy Informatyki sem. I 2014/2015 studia zaoczne Elektronika i Telekomunikacja!

EGZAMIN MATURALNY 2011 INFORMATYKA

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

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 )

Wykład 7 Abstrakcyjne typy danych kolejka priorytetowa

Język C zajęcia nr 5

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Kontrola przebiegu programu

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

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

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

1 Podstawy c++ w pigułce.

Wykład X. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2016 Janusz Słupik

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Proste algorytmy w języku C

Podstawy programowania w języku C

struct Student { char nazwisko[30]; int wiek; float ocena; }; #define MAX_ROZMIAR 3 Student lista_studentow[max_rozmiar];

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

. Podstawy Programowania 2. Grafy i ich reprezentacje. Arkadiusz Chrobot. 9 czerwca 2016

Wykład 10 Grafy, algorytmy grafowe

Zmienne i struktury dynamiczne

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Wykład 5. Operacje na tablicach

Języki programowania - podstawy

Typy danych. 2. Dane liczbowe 2.1. Liczby całkowite ze znakiem i bez znaku: 32768, -165, ; 2.2. Liczby rzeczywiste stało i zmienno pozycyjne:

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

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

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

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

Algorytmy sortujące i wyszukujące

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

3. Podaj elementy składowe jakie powinna uwzględniać definicja informatyki.

Co nie powinno być umieszczane w plikach nagłówkowych:

Warszawa dnia 2 stycznia 2011 r. Zbiór zadań z programowania w języku C do samodzielnego wykonania

1. Liczby i w zapisie zmiennoprzecinkowym przedstawia się następująco

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

Wykład z Technologii Informacyjnych. Piotr Mika

Wstęp do wskaźników w języku ANSI C

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie dynamiczne

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

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

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

( wykł. dr Marek Piasecki )

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

1. Abstrakcyjne typy danych

Algorytm. Słowo algorytm pochodzi od perskiego matematyka Mohammed ibn Musa al-kowarizimi (Algorismus - łacina) z IX w. ne.

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Algorytmy i Struktury Danych.

Złożoność obliczeniowa zadania, zestaw 2

Transkrypt:

I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom projektu () wykonaj A, () wykonaj A (2) a potem wykonaj B (2) wykonaj B 0. wybór warunkowy lub rozgałęzienie warunkowe (Q-warunek;A,B-czynności) 0. iteracja ograniczona (A - czynność; N - pewna liczba) 0. iteracja warunkowa (Q - warunek, A - czynność X, N - pewne liczby) 0. składanie struktur sterujących np. iteracje zagnieżdżone czyli pętle zagnieżdżone (N, M - pewne liczby, A - czynność) II. Struktury danych: 0. zmienne zawierające jedna daną (A - nazwa zmiennej wstawianie danej z prawej strony strzałki do zmiennej po lewej stronie strzałki 2.tablice jednowymiarowe (T - nazwa tablicy; X - numer elementu) 3. tablice dwuwymiarowe (T - nazwa tablicy X - numer wiersza Y - numer kolumny) jeśli Q, to wykonaj A, jeśli Q, to wykonaj A, w przeciwnym razie wykonaj B wykonaj A [dokładnie] N razy wykonuj A aż do Q lub dopóki Q, wykonuj A () wykonaj, co następuje, [dokładnie] N razy: (.0) wykonaj A [dokładnie] M razy jeśli Q, to A jeśli Q to A, w przeciwnym razie B; wykonaj, co następuje, [dokładnie] N razy wykonuj, co następuje, aż X < N dopóki X< N, wykonuj, co następuje (0) wykonuj, co następuje, [dokładnie] N razy: (.0) wykonaj, co następuje, [dokładnie] M razy: (..)... A T (X) - element tablicy o numerze X, T (X, Y) - element tablicy T o numerze wiersza X i numerze kolumny Y Zofia Kruczkiewicz, I-6, p325 C3 USM, Algorytmy i struktury danych, Wykład 2

.Ogólne sformułowanie algorytmu sortowania bąbelkowego - poziom koncepcji Algorytm sortowania N elementów: () wykonaj, co następuje, N - razy (.) wskaż na pierwszy element; (.2) wykonaj, co następuje, N - razy: (.2.) porównaj wskazany element z elementem następnym (.2.2 ) jeśli porównywane elementy są w niewłaściwej kolejności, zamień je miejscami; (.2.3) wskaż na następny element. 2. Uściślenie algorytmu sortowania bąbelkowego - poziom projektu Algorytm sortowania N elementów: () i ; (2) dopóki i <= N -, wykonuj co następuje: (2.) j ; (2.2) dopóki j <= N - i, wykonuj, co następuje: (2.2.) jeśli T(j + ) < T(j), to zamień je; (2.2.2) j j + ; (2.3) i i +; Uwagi:.W algorytmie sortowania występują dwie pętle: pętla zewnętrzna (2), pętla wewnętrzna (2.2). 2. Powtórzenia działań w pętlach są numerowane następująco: pętla (2) za pomocą zmiennej od i = do N - pętla (2.2) za pomocą zmiennej j = do N - i. Zofia Kruczkiewicz, I-6, p325 C3 USM, Algorytmy i struktury danych, Wykład 2 2

Lp Numery elementów tablicy T i /j 2 3 4 5 6 7 8 /2 Francja Grecja Albania Egipt Cypr Hiszpania Belgia Dania /3 Francja Albania Grecja Egipt Cypr Hiszpania Belgia Dania /4 Francja Albania Egipt Grecja Cypr Hiszpania Belgia Dania /6 Francja Albania Egipt Cypr Grecja Hiszpania Belgia Dania /7 Francja Albania Egipt Cypr Grecja Belgia Hiszpania Dania Francja Albania Egipt Cypr Grecja Belgia Dania Hiszpania 2/ Francja Albania Egipt Cypr Grecja Belgia Dania Hiszpania 2/2 Albania Francja Egipt Cypr Grecja Belgia Dania Hiszpania 2/3 Albania Egipt Francja Cypr Grecja Belgia Dania Hiszpania 2/5 Albania Egipt Cypr Francja Grecja Belgia Dania Hiszpania 2/6 Albania Egipt Cypr Francja Belgia Grecja Dania Hiszpania Albania Egipt Cypr Francja Belgia Dania Grecja Hiszpania 3/2 Albania Egipt Cypr Francja Belgia Dania Grecja Hiszpania 3/4 Albania Cypr Egipt Francja Belgia Dania Grecja Hiszpania 3/5 Albania Cypr Egipt Belgia Francja Dania Grecja Hiszpania Albania Cypr Egipt Belgia Dania Francja Grecja Hiszpania 4/3 Albania Cypr Egipt Belgia Dania Francja Grecja Hiszpania 4/4 Albania Cypr Belgia Egipt Dania Francja Grecja Hiszpania Albania Cypr Belgia Dania Egipt Francja Grecja Hiszpania 5/2 Albania Cypr Belgia Dania Egipt Francja Grecja Hiszpania Albania Belgia Cypr Dania Egipt Francja Grecja Hiszpania Tab.. Sortowanie bąbelkowe łańcuchów Uwaga: Kolumna Lp zawiera numery stanów pętli zewnętrznej i oraz wewnętrznej j, natomiast każdy wiersz odpowiada zawartości elementów tablicy T w stanie i/j przed zamianą elementów j z j+ Zofia Kruczkiewicz, I-6, p325 C3 USM, Algorytmy i struktury danych, Wykład 2 3

3. Realizacja 3.. Program ELI2D Zofia Kruczkiewicz, I-6, p325 C3 USM, Algorytmy i struktury danych, Wykład 2 4

3.2. Realizacja w C/C++ #include <stdlib.h> #include <stdio.h> #include <conio.h> typedef int element; const long N=20000L; const int m=0; inline void zamien(element &a, element &b); inline void porownaj_zamien(element &a, element &b); void wypelnij(element t[], long& ile); void wyswietl(element t[], long ile); void babelki(element t[], long l, long p); void main() { element * t=new element[n]; long ile=0; wypelnij(t,ile); // ile po zakończeniu funkcji jest równe N babelki(t,0,ile-); // ile- jest równe N-; 0 jest indeksem pierwszego elementu //tablicy, ile- jest indeksem ostatniego elementu tablicy wyswietl(t,ile); getch(); inline void zamien(element &a, element &b) { element pom = a; a=b; b=pom; inline void porownaj_zamien(element &a, element &b) { if (b<a) zamien(a,b); void babelki(element t[], long l, long p) { for( long i =l; i<p; i++) for (long j=l;j<p-i; j++) porownaj_zamien(t[j], t[j+]); Zofia Kruczkiewicz, I-6, p325 C3 USM, Algorytmy i struktury danych, Wykład 2 5

void wypelnij(element t[], long& ile) { srand(3); for (long 0; i<n; i++) t[i]=rand(); ile=n; void wyswietl(element t[], long ile) { for (long 0; i<ile; i++) { printf("%d \n", t[i]); if (i%20==0) { char z=getch(); if (z=='k') return; printf("%ld \n", ile); Zofia Kruczkiewicz, I-6, p325 C3 USM, Algorytmy i struktury danych, Wykład 2 6

4. Badanie czasochłonności algorytmu Analiza algorytmów polega na określeniu zasobów, jakie są potrzebne do ich wykonania. Zasobami są: czas wykonania pamięć szerokość kanału komunikacyjnego układy logiczne. Modelem obliczeń jest jednoprocesorowa maszyna z dostępem swobodnym do pamięci (RAM - Random Access Machine). Algorytmy są realizowane jako programy komputerowe, a instrukcje są wykonywane sekwencyjnie. Czas wykonania jest zależny od rozmiaru danych wejściowych. Rozmiar danych wejściowych jest zależny od związanego z nimi rozważanego problemu np.: sortowanie - liczba danych do posortowania mnożenie dwóch liczb - liczba bitów do reprezentowania danych w postaci binarnej problemy z danymi w postaci grafów - liczby wierzchołków i krawędzi. Czas działania algorytmu dla konkretnych danych wejściowych jest wyrażony liczbą wykonanych prostych (elementarnych) operacji lub kroków. Zakłada się, że operacja elementarna jest maszynowo niezależna. Czas wykonania i-tego wiersza programu wymaga czasu c j. Zofia Kruczkiewicz, I-6, p325 C3 USM, Algorytmy i struktury danych, Wykład 2 7

Analiza algorytmu sortowania bąbelkowego Lp Koszt Liczba wykonań for( long i =0; i<n-; i++) c N 2 for (long j=0;j<n--i; j++) c 2 t j = N i+; N 3 porownaj_zamien(t[j],t[j+]); c 3 t j- =N-i+-=N-i; 4 if (b<a) c 4 t j- =N-i+-=N-i; 5 zamien(a,b); c 5 t j- =N-i+-=N-i; 6 { c 6 t j- =N-i+-=N-i; element pom=a; 7 a=b; c 7 t j- =N-i+-=N-i; 8 b=pom; N T(N)=c N+ c 2 ( N i + ) + N c 3 ( N i) N c 8 t j- =N-i+-=N-i; ( N i + ) N N N N N N ( N i ( N i ( N i ( N i ( N i ( N i +c 4 ( N i) +c 5 ( N i) +c 6 ( N i) +c 7 ( N i) +c 8 ( N i) = N( N + ) 2 N N N N( N + ) 2 = c N + c 2 ( ) + (c 3 + c 4 + c 5 + c 6 + c 7 + c 8 ) ( N) = = c N + c (N 2 2 + N) c 2 + (c 3 + c 4 + c 5 + c 6 + c 7 + c 8 ) (N 2 - N) = 2 2 = N 2 (c 2 + c 2 3 + c 4 + c 5 + c 6 + c 7 + c 8 ) + N (c + c 2 - c 3 - c 4 - c 5 - c 6 - c 7 - c 2 2 2 2 2 2 2 8) - c 2 N T(N) c N 2 + c N Wniosek: Dla dużych N czas wykonania algorytmu sortowania bąbelkowego zależy od kwadratu liczby danych. Zofia Kruczkiewicz, I-6, p325 C3 USM, Algorytmy i struktury danych, Wykład 2 8