Sortare folosind "qsort()"
-------- ----- ------
Daca avem o multime relativ mica de elemente, atunci putem sa folosim sortare cu bule sau metoda sortarii prin selectie directa (care sunt de or 11511c23l dinul O(n^2)). Daca insa avem multe elemente, atunci este convenabil sa folosim metoda sortarii rapide ("quick sort"). Prototipul functiei "qsort()" se gaseste in <stdlib.h>. Acesta este
void qsort(void *array, size_t n_els, size_t el_size, int compare(const void *, const void *));
Argumentele acestei functii au rolul:
array - sirul care va fi sortat;
n_els - numarul de elemente ale sirului;
el_size - numarul de octeti necesar memorarii unui element;
compare - functia de comparare, ce se declara ca fiind int compare(const void *, const void *)
Functia de comparare are ca argumente doi pointeri catre void. Aceasta returneaza un intreg care este mai mic, egal sau mai mare
decat zero dupa cum primul argument este mai mic, egal sau mai mare decat al doilea argument.
-----------
Exemplu:
-----------
Vom scrie un program ce foloseste "qsort()". Initializam un vector, il tiparim, il sortam cu "qsort()", apoi il tiparim din nou.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 11 /* dimensiunea sirului */
int cmp(const void *vp, const void *vq); /* functia de comparare */
void init(double *a, int n);
void tipareste_sir(double *a, int n);
void main()
int cmp(const void *vp, const void *vq)
void init(double *a, int n)
void tipareste_sir(double *a, int n)
putchar('\n');
}
----------
Intrebari: 1. Ce trebuie sa modificati pentru a obtine ordinea crescatoare a sirului ?
---------- 2. Ce rol are "const" din declaratia lui "cmp()" ?
|