The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.
We recommend using Visual Studio 2017



The new home for Visual Studio documentation is Visual Studio 2017 Documentation on

The latest version of this topic can be found at qsort.

Performs a quick sort. A more secure version of this function is available; see qsort_s.

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


Start of target array.

Array size in elements.

Element size in bytes.

Pointer to a user-supplied routine that compares two array elements and returns a value that specifies their relationship.

The qsort function implements a quick-sort algorithm to sort an array of num elements, each of width bytes. The argument base is a pointer to the base of the array to be sorted. qsort overwrites this array by using the sorted elements.

qsort calls the compare routine one or more times during the sort, and passes pointers to two array elements on each call.

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

The routine compares the elements and returns one of the following values.

Compare function return valueDescription
< 0elem1 less than elem2
0elem1 equivalent to elem2
> 0elem1 greater than elem2

The array is sorted in increasing order, as defined by the comparison function. To sort an array in decreasing order, reverse the sense of "greater than" and "less than" in the comparison function.

This function validates its parameters. If compare or num is NULL, or if base is NULL and *num is nonzero, or if width is less than zero, the invalid parameter handler is invoked, as described in Parameter Validation. If execution is allowed to continue, the function returns and errno is set to EINVAL.

RoutineRequired header
qsort<stdlib.h> and <search.h>

For additional compatibility information, see Compatibility.

// 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: */  
   /* 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  


Searching and Sorting