
Sorting Algorithm

This is a sorting algorithm.   It may be applied to a set of data in order to sort it.    
For comparing various sorts, see compare sorts.  
For other sorting algorithms,   see sorting algorithms,   or:

O(n logn) sorts
Heap sort |
Merge sort |
Patience sort |
Quick sort
O(n log2n) sorts
Shell Sort
O(n2) sorts
Bubble sort |
Cocktail sort |
Cocktail sort with shifting bounds |
Comb sort |
Cycle sort |
Gnome sort |
Insertion sort |
Selection sort |
Strand sort
other sorts
Bead sort |
Bogo sort |
Common sorted list |
Composite structures sort |
Custom comparator sort |
Counting sort |
Disjoint sublist sort |
External sort |
Jort sort |
Lexicographical sort |
Natural sorting |
Order by pair comparisons |
Order disjoint list items |
Order two numerical lists |
Object identifier (OID) sort |
Pancake sort |
Quickselect |
Permutation sort |
Radix sort |
Ranking methods |
Remove duplicate elements |
Sleep sort |
Stooge sort |
[Sort letters of a string] |
Three variable sort |
Topological sort |
Tree sort




Task

Sort an integer array with the   radix sort algorithm.

The primary purpose is to complete the characterization of sort algorithms task.




  [ stack ]                    is digit     (   --> s )
 
  [ behead swap witheach min ] is smallest  ( [ --> n )
 
  [ [] over smallest
    rot witheach
      [ over -
        rot swap join swap ]
    swap
    0 digit put
    dup size temp put
    [ ' [ [ ] ] 16 of
      constant
      swap witheach
        [ dup dip
            [ digit share
              >> 15 &
          2dup peek ]
          join
          unrot poke ]
      dup 0 peek size
      temp share != while
      behead swap
      witheach join
      4 digit tally again ]
    behead nip
    temp release
    digit release
    [] unrot
    witheach
      [ over +
        rot swap join swap ]
    drop ]                     is radixsort ( [ --> [ )
 
  [] 256 times
    [ 1999 random 999 - join ]
  radixsort
  16 times
     [ 16 times
         [ behead
           dup 0 > if sp
           dup abs dup
           10 < if sp
           100 < if sp
           echo sp ] cr ]
  drop