Source code pulled from OpenBSD for OpenNTPD. The place to contribute to this code is via the OpenBSD CVS tree.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
4.7 KiB

  1. .\" Copyright (c) 1990, 1991, 1993
  2. .\" The Regents of the University of California. All rights reserved.
  3. .\"
  4. .\" Redistribution and use in source and binary forms, with or without
  5. .\" modification, are permitted provided that the following conditions
  6. .\" are met:
  7. .\" 1. Redistributions of source code must retain the above copyright
  8. .\" notice, this list of conditions and the following disclaimer.
  9. .\" 2. Redistributions in binary form must reproduce the above copyright
  10. .\" notice, this list of conditions and the following disclaimer in the
  11. .\" documentation and/or other materials provided with the distribution.
  12. .\" 3. All advertising materials mentioning features or use of this software
  13. .\" must display the following acknowledgement:
  14. .\" This product includes software developed by the University of
  15. .\" California, Berkeley and its contributors.
  16. .\" 4. Neither the name of the University nor the names of its contributors
  17. .\" may be used to endorse or promote products derived from this software
  18. .\" without specific prior written permission.
  19. .\"
  20. .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21. .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24. .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. .\" SUCH DAMAGE.
  31. .\"
  32. .\" from: @(#)radixsort.3 8.2 (Berkeley) 1/27/94
  33. .\" $Id: radixsort.3,v 1.1.1.1 1995/10/18 08:42:18 deraadt Exp $
  34. .\"
  35. .Dd January 27, 1994
  36. .Dt RADIXSORT 3
  37. .Os
  38. .Sh NAME
  39. .Nm radixsort
  40. .Nd radix sort
  41. .Sh SYNOPSIS
  42. .Fd #include <limits.h>
  43. .Fd #include <stdlib.h>
  44. .Ft int
  45. .Fn radixsort "u_char **base" "int nmemb" "u_char *table" "u_int endbyte"
  46. .Ft int
  47. .Fn sradixsort "u_char **base" "int nmemb" "u_char *table" "u_int endbyte"
  48. .Sh DESCRIPTION
  49. The
  50. .Fn radixsort
  51. and
  52. .Fn sradixsort
  53. functions
  54. are implementations of radix sort.
  55. .Pp
  56. These functions sort an array of pointers to byte strings, the initial
  57. member of which is referenced by
  58. .Fa base .
  59. The byte strings may contain any values; the end of each string
  60. is denoted by the user-specified value
  61. .Fa endbyte .
  62. .Pp
  63. Applications may specify a sort order by providing the
  64. .Fa table
  65. argument.
  66. If
  67. .Pf non- Dv NULL ,
  68. .Fa table
  69. must reference an array of
  70. .Dv UCHAR_MAX
  71. + 1 bytes which contains the sort
  72. weight of each possible byte value.
  73. The end-of-string byte must have a sort weight of 0 or 255
  74. (for sorting in reverse order).
  75. More than one byte may have the same sort weight.
  76. The
  77. .Fa table
  78. argument
  79. is useful for applications which wish to sort different characters
  80. equally, for example, providing a table with the same weights
  81. for A-Z as for a-z will result in a case-insensitive sort.
  82. If
  83. .Fa table
  84. is NULL, the contents of the array are sorted in ascending order
  85. according to the
  86. .Tn ASCII
  87. order of the byte strings they reference and
  88. .Fa endbyte
  89. has a sorting weight of 0.
  90. .Pp
  91. The
  92. .Fn sradixsort
  93. function is stable, that is, if two elements compare as equal, their
  94. order in the sorted array is unchanged.
  95. The
  96. .Fn sradixsort
  97. function uses additional memory sufficient to hold
  98. .Fa nmemb
  99. pointers.
  100. .Pp
  101. The
  102. .Fn radixsort
  103. function is not stable, but uses no additional memory.
  104. .Pp
  105. These functions are variants of most-significant-byte radix sorting; in
  106. particular, see D.E. Knuth's Algorithm R and section 5.2.5, exercise 10.
  107. They take linear time relative to the number of bytes in the strings.
  108. .Sh RETURN VALUES
  109. Upon successful completion 0 is returned.
  110. Otherwise, \-1 is returned and the global variable
  111. .Va errno
  112. is set to indicate the error.
  113. .Sh ERRORS
  114. .Bl -tag -width Er
  115. .It Bq Er EINVAL
  116. The value of the
  117. .Fa endbyte
  118. element of
  119. .Fa table
  120. is not 0 or 255.
  121. .El
  122. .Pp
  123. Additionally, the
  124. .Fn sradixsort
  125. function
  126. may fail and set
  127. .Va errno
  128. for any of the errors specified for the library routine
  129. .Xr malloc 3 .
  130. .Sh SEE ALSO
  131. .Xr sort 1 ,
  132. .Xr qsort 3
  133. .Pp
  134. .Rs
  135. .%A Knuth, D.E.
  136. .%D 1968
  137. .%B "The Art of Computer Programming"
  138. .%T "Sorting and Searching"
  139. .%V Vol. 3
  140. .%P pp. 170-178
  141. .Re
  142. .Rs
  143. .%A Paige, R.
  144. .%D 1987
  145. .%T "Three Partition Refinement Algorithms"
  146. .%J "SIAM J. Comput."
  147. .%V Vol. 16
  148. .%N No. 6
  149. .Re
  150. .Rs
  151. .%A McIlroy, P.
  152. .%D 1993
  153. .%B "Engineering Radix Sort"
  154. .%T "Computing Systems"
  155. .%V Vol. 6:1
  156. .%P pp. 5-27
  157. .Re
  158. .Sh HISTORY
  159. The
  160. .Fn radixsort
  161. function first appeared in 4.4BSD.