# radixsort man page

**radixsort**, **sradixsort** — radix sort

## Library

library “libbsd”

## Synopsis

**#include <limits.h>** **#include <bsd/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 `nmemb` element array of pointers to byte strings, with the initial member of which is referenced by `base`. The byte strings may contain any values. End of strings is denoted by character which has same weight as user specified value `endbyte`. `endbyte` has to be between 0 and 255.

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 *Algorithm R* 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).

## See Also

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.*, No. 6, Vol. 16, 1987.

McIlroy, P., *Computing Systems*, *Engineering Radix Sort*, Vol. 6:1, pp. 5-27, 1993.

## History

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

## Referenced By

The man page sradixsort(3) is an alias of radixsort(3).