# qsort

## PROLOG



           This manual page is part of the POSIX Programmer's Manual.  The
           Linux implementation of this interface may differ (consult the
           corresponding Linux manual page for details of Linux behavior), or
           the interface may not be implemented on Linux.
    


## NAME



           qsort — sort a table of data
    


## SYNOPSIS



           #include <stdlib.h>
    
           void qsort(void *_base_ , size_t _nel_ , size_t _width_ ,
               int (*_compar_)(const void *, const void *));
    


## DESCRIPTION



           The functionality described on this reference page is aligned with
           the ISO C standard. Any conflict between the requirements
           described here and the ISO C standard is unintentional. This
           volume of POSIX.1‐2017 defers to the ISO C standard.
    
           The _qsort_() function shall sort an array of _nel_ objects, the
           initial element of which is pointed to by _base_.  The size of each
           object, in bytes, is specified by the _width_ argument. If the _nel_
           argument has the value zero, the comparison function pointed to by
           _compar_ shall not be called and no rearrangement shall take place.
    
           The application shall ensure that the comparison function pointed
           to by _compar_ does not alter the contents of the array. The
           implementation may reorder elements of the array between calls to
           the comparison function, but shall not alter the contents of any
           individual element.
    
           When the same objects (consisting of width bytes, irrespective of
           their current positions in the array) are passed more than once to
           the comparison function, the results shall be consistent with one
           another.  That is, they shall define a total ordering on the
           array.
    
           The contents of the array shall be sorted in ascending order
           according to a comparison function. The _compar_ argument is a
           pointer to the comparison function, which is called with two
           arguments that point to the elements being compared. The
           application shall ensure that the function returns an integer less
           than, equal to, or greater than 0, if the first argument is
           considered respectively less than, equal to, or greater than the
           second. If two members compare as equal, their order in the sorted
           array is unspecified.
    


## RETURN VALUE



           The _qsort_() function shall not return a value.
    


## ERRORS



           No errors are defined.
    
           _The following sections are informative._
    


## EXAMPLES



           None.
    


## APPLICATION USAGE



           The comparison function need not compare every byte, so arbitrary
           data may be contained in the elements in addition to the values
           being compared.
    


## RATIONALE



           The requirement that each argument (hereafter referred to as _p)_ to
           the comparison function is a pointer to elements of the array
           implies that for every call, for each argument separately, all of
           the following expressions are non-zero:
    
               ((char *)p - (char *)base) % width == 0
               (char *)p >= (char *)base
               (char *)p < (char *)base + nel * width
    


## FUTURE DIRECTIONS



           None.
    


* * *