Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Nowa wersja
Poprzednia wersja
pl:dydaktyka:asd:cwiczenia:2011-sort1 [2011/03/10 12:32]
kkr utworzono
pl:dydaktyka:asd:cwiczenia:2011-sort1 [2019/06/27 15:50] (aktualna)
Linia 10: Linia 10:
       - przez wybór (SelectionSort),​       - przez wybór (SelectionSort),​
       - przez wstawianie (InsertionSort),​       - przez wstawianie (InsertionSort),​
-      - kubełkowego (BucketSort),​ 
       - przez zliczanie (CountingSort).       - przez zliczanie (CountingSort).
     - Ograniczenia stosowania w.w. algorytmów.     - Ograniczenia stosowania w.w. algorytmów.
   - Implementacja funkcji sortujących dla wszystkich w.w. algorytmów:​   - Implementacja funkcji sortujących dla wszystkich w.w. algorytmów:​
-    - <code c>void sortBubble()</​code>​+    - Sortowanie bąbelkowe:<code c>void sortBubble(type* tab, int length)</​code>​ 
 +    - Sortowanie przez wybór:<​code c>void sortSelection(type* tab, int length)</​code>​ 
 +    - Sortowanie przez wstawianie:<​code c>void sortInsertion(type* tab, int length)</​code>​ 
 +    - Sortowanie przez zliczanie:<​code c>void sortCounting(type* tab, int length)</​code>​ 
 +  - W przypadku implementacji algorytmu sortowania przez zliczanie należy wcześniej obliczyć wielkość przedziału wartości w tablicy którą należy posortować. \\ Następnie, na podstawie tego wyniku należy określić wielkość tablicy zliczającej. 
 +  - Proszę przygotować prostą funkcję, która będzie używana do porównywania wartości.<​code c> 
 +/* 
 + * \brief Funkcja porównująca dwie wartości 
 + *  
 + * \param val1 - wartość 1. 
 + * \param val2 - wartość 2. 
 + * \return Funkcja zwraca: 
 + * \li -1 jeżeli val1 > val2 
 + * \li 0 jeżeli val1 == val2 
 + * \li 1 jeżeli val1 < val2 
 +*/ 
 +int compare(type val1, type val2) 
 +</​code>​ 
 +  - Powyższa funkcja powinna być użyta do **wszystkich** operacji porównywania wartości jaki są wykonywane podczas działania wyżej wymienionych algorytmów. 
 +  - Proszę przygotować prostą funkcję, która będzie używana do wypisywania tablicy:<​code c> 
 +/* 
 + * \brief Funkcja wypisująca wartości tablicy 
 + *  
 + * \param tab - tablica wartosci 
 + * \param length - wielkość tablicy 
 +*/ 
 +void printtab(type* tab, int length) 
 +</​code>​ 
 +  - **type** jest zdefiniowane poprzez **typedef**:<​code c>​typedef int type;</​code>​umożliwi nam to szybką zmianę typu na którym będziemy pracowali. 
 +  - Do pomiaru czasu działania algorytmów (na tych oraz późniejszych zajęciach) będziemy używali funkcji **rdtsc**:<​code c> 
 +#include <​stdint.h>​ 
 + 
 +__inline__ uint64_t rdtsc()  
 +
 +    uint32_t lo, hi; 
 +    __asm__ __volatile__ ( 
 +    "xorl %%eax,%%eax \n        cpuid"​ 
 +    ::: "​%rax",​ "​%rbx",​ "​%rcx",​ "​%rdx"​);​ 
 +    __asm__ __volatile__ ("​rdtsc"​ : "​=a"​ (lo), "​=d"​ (hi)); 
 +    return (uint64_t)hi << 32 | lo; 
 +
 +</​code>​ 
 +  - Funkcja zwraca liczbę cykli procesora od momentu uruchomienia komputera. Do pomiaru czasu działania kodu wykorzystujemy ją następująco:<​code c> 
 +uint64_t s,e,d; 
 +... 
 +s = rdtsc(); 
 +// kod którego czas wykonania mierzymy 
 +e = rdtsc(); 
 +d = e-s; 
 +printf("​Czas wykonania kodu d = %lld\n",​ d); 
 +</​code>​ 
 +  - Bardzo proszę przetestować na swoich systemach operacyjnych czy funkcja **rdtsc** nie jest zablokowana.
pl/dydaktyka/asd/cwiczenia/2011-sort1.1299756723.txt.gz · ostatnio zmienione: 2019/06/27 15:51 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0