Condividi tramite


qsort

Esegue un ordinamento rapido. È disponibile una versione più sicura di questa funzione; vedere qsort_s.

Sintassi

void qsort(
   void *base,
   size_t number,
   size_t width,
   int (__cdecl *compare )(const void *, const void *)
);

Parametri

base
Inizio della matrice di destinazione.

number
Dimensione della matrice in elementi.

width
Dimensione dell'elemento in byte.

compare
Puntatore a una routine fornita dall'utente che confronta due elementi di matrice e restituisce un valore che ne specifica la relazione.

Osservazioni:

La funzione qsort implementa un algoritmo di ordinamento rapido per ordinare una matrice di number elementi, di width byte ciascuno. L'argomento base è un puntatore alla base della matrice da ordinare. qsort sovrascrive questa matrice con gli elementi ordinati.

qsort chiama la routine compare una o più volte durante l'ordinamento e passa i puntatori a due elementi di matrice per ogni chiamata. Se compare indica che due elementi sono uguali, il relativo ordine nella matrice ordinata risultante non è specificato.

compare(const void *elem1, const void *elem2);

La routine confronta gli elementi e restituisce uno dei valori seguenti.

Valore restituito dalla funzione compare Descrizione
< 0 elem1 minore di elem2
0 elem1 equivalente a elem2
> 0 elem1 maggiore di elem2

La matrice viene ordinata in ordine crescente, come definito dalla funzione di confronto. Per ordinare una matrice in ordine decrescente, invertire il senso di "maggiore di" e "minore di" nella funzione di confronto.

Questa funzione convalida i relativi parametri. Se compare o number è NULLoppure se base è NULL e number è diverso da zero o se width è minore di zero, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, la funzione restituisce e errno viene impostata su EINVAL.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Requisiti

Ciclo Intestazione obbligatoria
qsort <stdlib.h> e <search.h>

Per altre informazioni sulla compatibilità, vedere Compatibility (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 );
}
boy deserves every favor good

Vedi anche

Ricerca e ordinamento
bsearch
_lsearch