idlastro / Miscellaneous (Non-Astronomy) Procedures: BSORT

[Source code]

NAME
BSORT
PURPOSE
Function to sort data into ascending order, like a simple bubble sort.
EXPLANATION
Original subscript order is maintained when values are equal (stable sort).
(This differs from the IDL SORT routine alone, which may rearrange 
order for equal values)
A faster algorithm (radix sort) for numeric data is described at 
http://idldatapoint.com/2012/04/19/an-lsd-radix-sort-algorithm-in-idl/
and available at
https://github.com/mgalloy/mglib/blob/master/src/analysis/mg_sort.pro
CALLING SEQUENCE
result = bsort( array, [ asort, /INFO, /REVERSE ] )
INPUT
Array - array to be sorted
OUTPUT
result - sort subscripts are returned as function value
OPTIONAL OUTPUT
Asort - sorted array
OPTIONAL KEYWORD INPUTS
/REVERSE - if this keyword is set, and non-zero, then data is sorted
          in descending order instead of ascending order.
/INFO = optional keyword to cause brief message about # equal values.
HISTORY
written by F. Varosi Oct.90:
uses WHERE to find equal clumps, instead of looping with IF ( EQ ).
compatible with string arrays, test for degenerate array 
20-MAY-1991     JKF/ACC via T AKE- return indexes if the array to 
                be sorted has all equal values.
Aug - 91  Added  REVERSE keyword   W. Landsman      
Always return type LONG    W. Landsman     August 1994
Converted to IDL V5.0   W. Landsman   September 1997