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
qsort ja failidRisto Heinsar ja Ott Madis Ozolit
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
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
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
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
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
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
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