02.09.2013 Views

Sorteren Sorteren door selectie

Sorteren Sorteren door selectie

Sorteren Sorteren door selectie

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

In volgende tabel is de gebruikte rekentijd weergegeven voor een aantal<br />

verschillende n waarden:<br />

n <strong>selectie</strong> invoegen bubble quicksort<br />

128 3 2 3 2<br />

256 8 6 12 3<br />

512 25 17 40 6<br />

1024 85 59 158 14<br />

2048 316 214 580 29<br />

4096 1234 797 2240 59<br />

8192 4828 3122 8890 120<br />

+ quicksort is duidelijk de snelste methode<br />

+ bubblesort (klassiek voorbeeld in veel cursussen) de minst goede methode<br />

Een generieke sorteerfunctie<br />

De functie die de rangorde/volgorde van de elementen die moeten gesorteerd<br />

worden bepaalt, wordt als actueel argument <strong>door</strong>gegeven aan de<br />

sorteerfunctie. In de sorteerfunctie is deze parameter een pointer naar een<br />

functie. Om de gepaste kleiner dan relatie te bepalen, wordt met behulp van<br />

deze pointer de juiste functie opgeroepen.<br />

Deze functie heeft twee parameters, namelijk pointers naar de twee elementen<br />

die met elkaar moeten vergeleken worden. De functie heeft als<br />

terugkeerwaarde:<br />

• -1 : als het eerste element kleiner is dan het tweede element;<br />

• 0 : als het eerste element gelijk is aan het tweede element;<br />

• 1 : als het eerste element groter is dan het tweede element.<br />

Bijvoorbeeld wanneer de twee elementen pointers naar strings zijn, dan kan de<br />

standaard bibliotheekfunctie int strcmp(const char ∗, const char ∗) als functie<br />

gebruikt worden.<br />

/*<br />

* gensort : een generieke sorteerfunctie<br />

*/<br />

#include <br />

#include <br />

#define AANTAL 8260<br />

#define GROOT 65535.0<br />

typedef struct<br />

{<br />

} Blok ;<br />

int x ;<br />

int y ;<br />

void s e l e c t i e ( Blok a [ ] , int b , int n , int (∗ vgl )( Blok ∗ , Blok ∗ ) ) ;<br />

void druk( Blok a [ ] , int n ) ;<br />

int vglx ( Blok ∗s , Blok ∗t ) ;<br />

int vglf ( Blok ∗s , Blok ∗t ) ;<br />

int main( int argc , char ∗argv [ ] )<br />

{<br />

Blok a [AANTAL] ;<br />

int i , n = 10;<br />

if ( argc > 1 )<br />

n = atoi ( argv [ 1 ] ) ;<br />

srand (n ∗1063);<br />

printf (” %d \n” , rand () ) ;<br />

for ( i =1; i

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!