mirror of https://github.com/mkerrisk/man-pages
120 lines
3.5 KiB
Groff
120 lines
3.5 KiB
Groff
.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
|
|
.\"
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
.\" preserved on all copies.
|
|
.\"
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
.\" permission notice identical to this one.
|
|
.\"
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
.\" have taken the same level of care in the production of this manual,
|
|
.\" which is licensed free of charge, as they might when working
|
|
.\" professionally.
|
|
.\"
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
.\"
|
|
.\" References consulted:
|
|
.\" Linux libc source code
|
|
.\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
|
|
.\" 386BSD man pages
|
|
.\"
|
|
.\" Modified 1993-03-29, David Metcalfe
|
|
.\" Modified 1993-07-24, Rik Faith (faith@cs.unc.edu)
|
|
.\" 2006-01-15, mtk, Added example program.
|
|
.\"
|
|
.\" FIXME glibc 2.8 added qsort_r(), which needs to be documented.
|
|
.\"
|
|
.TH QSORT 3 2003-11-15 "" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
qsort \- sorts an array
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <stdlib.h>
|
|
.sp
|
|
.BI "void qsort(void *" base ", size_t " nmemb ", size_t " size ,
|
|
.BI " int(*" compar ")(const void *, const void *));"
|
|
.fi
|
|
.SH DESCRIPTION
|
|
The
|
|
.BR qsort ()
|
|
function sorts an array with \fInmemb\fP elements of
|
|
size \fIsize\fP.
|
|
The \fIbase\fP argument points to the start of the
|
|
array.
|
|
.PP
|
|
The contents of the array are sorted in ascending order according to a
|
|
comparison function pointed to by \fIcompar\fP, which is called with two
|
|
arguments that point to the objects being compared.
|
|
.PP
|
|
The comparison function must return an integer less than, equal to, or
|
|
greater than zero if the first argument is considered to be respectively
|
|
less than, equal to, or greater than the second.
|
|
If two members compare
|
|
as equal, their order in the sorted array is undefined.
|
|
.SH "RETURN VALUE"
|
|
The
|
|
.BR qsort ()
|
|
function returns no value.
|
|
.SH "CONFORMING TO"
|
|
SVr4, 4.3BSD, C89, C99.
|
|
.SH NOTES
|
|
Library routines suitable for use as the
|
|
.I compar
|
|
argument include
|
|
.BR alphasort (3)
|
|
and
|
|
.BR versionsort (3).
|
|
To compare C strings, the comparison function can call
|
|
.BR strcmp (3),
|
|
as shown in the example below.
|
|
.SH EXAMPLE
|
|
For one example of use, see the example under
|
|
.BR bsearch (3).
|
|
|
|
Another example is the following program,
|
|
which sorts the strings given in its command-line arguments:
|
|
.sp
|
|
.nf
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
#include <string.h>
|
|
#include <assert.h>
|
|
|
|
static int
|
|
cmpstringp(const void *p1, const void *p2)
|
|
{
|
|
/* The actual arguments to this function are "pointers to
|
|
pointers to char", but strcmp(3) arguments are "pointers
|
|
to char", hence the following cast plus dereference */
|
|
|
|
return strcmp(* (char * const *) p1, * (char * const *) p2);
|
|
}
|
|
|
|
int
|
|
main(int argc, char *argv[])
|
|
{
|
|
int j;
|
|
|
|
assert(argc > 1);
|
|
|
|
qsort(&argv[1], argc \- 1, sizeof(char *), cmpstringp);
|
|
|
|
for (j = 1; j < argc; j++)
|
|
puts(argv[j]);
|
|
exit(EXIT_SUCCESS);
|
|
}
|
|
.fi
|
|
.SH "SEE ALSO"
|
|
.BR sort (1),
|
|
.BR alphasort (3),
|
|
.BR strcmp (3),
|
|
.BR versionsort (3)
|