8
qsort ja failid Risto Heinsar ja Ott Madis Ozolit

qsort ja failid

  • Upload
    iren

  • View
    53

  • Download
    6

Embed Size (px)

DESCRIPTION

qsort ja failid. Risto Heinsar ja Ott Madis Ozolit. qsort. Lihtne ja optimaalne viis sorteerida massiive Kiirusest Halvimal juhul sama kiire, kui mullsort (tehakse kuni n 2 vahetust) Keskmiselt tunduvalt kiirem (tehakse kuni n* log n vahetust) - PowerPoint PPT Presentation

Citation preview

Page 1: qsort  ja failid

qsort ja failidRisto Heinsar ja Ott Madis Ozolit

Page 2: qsort  ja failid

Risto Heinsar & Ott Madis Ozolit 2

qsort• Lihtne ja optimaalne viis sorteerida massiive• Kiirusest• Halvimal juhul sama kiire, kui mullsort (tehakse kuni n2 vahetust)• Keskmiselt tunduvalt kiirem (tehakse kuni n*log n vahetust)

• Nt sorteerides 100 arvu:1002 = 10 000 vahetust100*log(100) = 100 *2 = 200 vahetust

2013

Page 3: qsort  ja failid

Risto Heinsar & Ott Madis Ozolit 3

qsort funktsioon• qsort funktsiooni protüüp:

void qsort (void* base, size_t num, size_t size,int (*compar)(const void*,const void*));

• Parameetrid:• base – viit massiivi kõige esimesele elemendile• num – mitu elementi on massiivis• size – ühe elemendi suurus• compar – viit võrdlusfunktsioonile

2013

Page 4: qsort  ja failid

Risto Heinsar & Ott Madis Ozolit 4

qsort näide#include <stdio.h>

#include <stdlib.h> 

int vordlusFunktsioon(const void *a, const void *b); 

int main(void) {

int i, arvud[] = {40, 10, 100, 90, 20, 25};

qsort (arvud, 6, sizeof(int), vordlusFunktsioon);

for (i = 0; i < 6; printf ("%d ",arvud[i++]) ;

return 0;

int vordlusFunktsioon(const void *a, const void *b) {

if(*(int*)a > *(int*)b) return 1;

else if(*(int*)a < *(int*)b) return -1;

else return 0;

}

2013

Page 5: qsort  ja failid

Risto Heinsar & Ott Madis Ozolit 5

Failideks jagamine• Suurte koodide puhul on sarnase eesmärgiga funktsioonid mõistlik

jagada põhikoodist eraldiolevatesse failidesse• Võimalik lisada eelnevalt valmistatud koodifaile ja teeke oma

programmi täiendava funktsionaalsuse loomiseks• Kasutatavad failid"minukood.h" – header ehk päise fail, mis sisaldab eelkõige funktsiooni prototüüpe. Täiendavalt ka (klasse), muutujaid jms"minukood.c" – funktsioonide sisu, mis soovitakse programmile lisada

2013

Page 6: qsort  ja failid

Risto Heinsar & Ott Madis Ozolit 6

Mitme faili kasutamise meetodid1. Projektide kasutamine• Eeldab teekide lisamist (#include "minupais.h")• Eeldab IDE tuge projektidele. Nt Codeblocks, Visual Studio, Eclipse jt

2. Käsurealt kompileerimine• Eeldab teekide lisamist (#include "minupais.h")• gcc -o minuprogramm fail1.c fail2.c -lm

3. Otsene lisamine• Täiendavat päisefaili ei kasutata• Koodile lisatakse teise koodifaili asukoht (#include "minukood.c")

2013

Page 7: qsort  ja failid

Risto Heinsar & Ott Madis Ozolit 7

Käpp soojaks• Lae alla prog2 -> Koodinaited -> failideks-jagamine -> *.*• Tutvu failide ülesehitusega• kompileeri failid käsurealt:

gcc -o programminimi fail1.c fail2.c –lm• Veendu programmi töötamises

• NB! MS Windowsis vaja lisata kompilaatori asukoht Environment Variables -> System Variables -> PATH alla!• Linuxis töötab vaikimisi

2013

Page 8: qsort  ja failid

Risto Heinsar & Ott Madis Ozolit 8

Tunnitöö• Ava kood "10_tunnikood.c"• Tekita peaprogrammi jaoks päisefail ("nimi.h")• Deklareeri funktsioonid päisefailis• Realiseeri funktsioonid eraldi koodifailis• Tehted realiseeri järgnevalt: Kasutajalt küsitakse 2 reaalarvu, vastava

tehte tulemus tagastatakse funktsiooni töö tulemusena• Sortimine realiseeri järgnevalt: Kasutajalt küsitakse n reaalarvu, need

salvestatakse massiivi ning kasuta qsort funktsiooni sortimiseks• Kompileeri failid käsurealt

2013