---
name: "radixsort"
section: "3"
platform: "macos"
package: "Libc"
version: "1752.120.2"
release: "macOS 26.5"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/radixsort"
---

# radixsort(3)

radix sort

## NAME

**radixsort**, **sradixsort** – radix sort

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<limits.h\>**

**#include \<stdlib.h\>**

*int*\

**radixsort**(*const unsigned char \*\*base*, *int nmemb*, *const unsigned char \*table*, *unsigned endbyte*);

*int*\

**sradixsort**(*const unsigned char \*\*base*, *int nmemb*, *const unsigned char \*table*, *unsigned endbyte*);

## DESCRIPTION

The **radixsort**() and **sradixsort**() functions are implementations of radix sort.

These functions sort an array of pointers to byte strings, the initial member of which is referenced by *base*. The byte strings may contain any values; the end of each string is denoted by the user-specified value *endbyte*.

Applications may specify a sort order by providing the *table* argument. If non-NULL, *table* must reference an array of UCHAR\_MAX + 1 bytes which contains the sort weight of each possible byte value. The end-of-string byte must have a sort weight of 0 or 255 (for sorting in reverse order). More than one byte may have the same sort weight. The *table* argument is useful for applications which wish to sort different characters equally, for example, providing a table with the same weights for A-Z as for a-z will result in a case-insensitive sort. If *table* is NULL, the contents of the array are sorted in ascending order according to the ASCII order of the byte strings they reference and *endbyte* has a sorting weight of 0.

The **sradixsort**() function is stable, that is, if two elements compare as equal, their order in the sorted array is unchanged. The **sradixsort**() function uses additional memory sufficient to hold *nmemb* pointers.

The **radixsort**() function is not stable, but uses no additional memory.

These functions are variants of most-significant-byte radix sorting; in particular, see D.E. Knuth's and section 5.2.5, exercise 10. They take linear time relative to the number of bytes in the strings.

## RETURN VALUES

The **radixsort()** function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

## ERRORS

- \[EINVAL\]

  The value of the *endbyte* element of *table* is not 0 or 255.

Additionally, the **sradixsort**() function may fail and set *errno* for any of the errors specified for the library routine [malloc(3)](/malloc/3.md).

## SEE ALSO

[sort(1)](/sort/1.md), [qsort(3)](/qsort/3.md)

Knuth, D.E., “Sorting and Searching”, *The Art of Computer Programming*, Vol. 3, pp. 170-178, 1968. Paige, R., “Three Partition Refinement Algorithms”, *SIAM J. Comput.*, Vol. 16, No. 6, 1987. McIlroy, P., “Computing Systems”, *Engineering Radix Sort*, Vol. 6:1, pp. 5-27, 1993.

## HISTORY

The **radixsort**() function first appeared in 4.4BSD.
