qsort
Esegue un algoritmo QuickSort. È disponibile una versione più sicura di questa funzione; vedere qsort_s.
void qsort(
void *base,
size_t num,
size_t width,
int (__cdecl *compare )(const void *, const void *)
);
Parametri
base
Inizio dell'array di destinazione.num
Dimensione dell'array in elementi.width
Dimensione dell'elemento in byte.compare
Puntatore a una routine fornita dall'utente che confronta due elementi di array e restituisce un valore che specifica la loro relazione.
Note
La funzione qsort implementa un algoritmo di ordinamento QuickSort che consente di ordinare un array di num elementi, di width byte ciascuno. L'argomento base è un puntatore alla base della matrice da ordinare. qsort sovrascrive questo array utilizzando gli elementi ordinati.
qsort chiama la routine compare una o più volte durante l'ordinamento, e passa i puntatori a due elementi di array ad ogni chiamata.
compare( (void *) & elem1, (void *) & elem2 );
La routine confronta gli elementi e restituisce uno dei valori seguenti.
La funzione di confronto restituisce un valore |
Descrizione |
---|---|
< 0 |
elem1 minore di elem2 |
0 |
elem1 è equivalente a elem2 |
> 0 |
elem1 è maggiore di elem2 |
L'array viene ordinato in ordine crescente, come definito dalla funzione di confronto. Per ordinare un array in ordine decrescente, invertire il verso di "maggiore di" e "minore di" nella funzione di confronto.
Questa funzione convalida i parametri. Se compare o num sono NULL o se base è NULL e *num è diverso da zero, o se width è minore di zero, viene invocato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione restituisce -1 e imposta errno su EINVAL.
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
qsort |
<stdlib.h> e <search.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità.
Esempio
// crt_qsort.c
// arguments: every good boy deserves favor
/* This program reads the command-line
* parameters and uses qsort to sort them. It
* then displays the sorted arguments.
*/
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int compare( const void *arg1, const void *arg2 );
int main( int argc, char **argv )
{
int i;
/* Eliminate argv[0] from sort: */
argv++;
argc--;
/* Sort remaining args using Quicksort algorithm: */
qsort( (void *)argv, (size_t)argc, sizeof( char * ), compare );
/* Output sorted list: */
for( i = 0; i < argc; ++i )
printf( " %s", argv[i] );
printf( "\n" );
}
int compare( const void *arg1, const void *arg2 )
{
/* Compare all of both strings: */
return _stricmp( * ( char** ) arg1, * ( char** ) arg2 );
}
Equivalente .NET Framework
System::Collections::ArrayList::Sort