
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


Sort an array of composite structures by a key.



For example, if you define a composite structure that presents a name-value pair (in pseudo-code):

Define structure pair such that: 
   name as a string
   value as a string

and an array of such pairs:

   x: array of pairs

then define a sort routine that sorts the array x by the key name.

This task can always be accomplished with Sorting Using a Custom Comparator.

If your language is not listed here, please see the other article.




/* NetRexx */
options replace format comments java crossref symbols nobinary
 
-- =============================================================================
class RSortCompsiteStructure public
 
  -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  method main(args = String[]) public static
    places = [ -
      PairBean('London',     'UK'), PairBean('New York',   'US') -
    , PairBean('Boston',     'US'), PairBean('Washington', 'US') -
    , PairBean('Washington', 'UK'), PairBean("Birmingham", 'US') -
    , PairBean("Birmingham", 'UK'), PairBean("Boston",     'UK') -
    ]
    say displayArray(places)
    Arrays.sort(places, PairComparator())
    say displayArray(places)
    return
 
  method displayArray(harry = PairBean[]) constant
    disp = ''
    loop elmt over harry
      disp = disp','elmt
      end elmt
    return '['disp.substr(2)']' -- trim leading comma
 
-- =============================================================================
class RSortCompsiteStructure.PairBean
  properties indirect
    name
    value
  method PairBean(name_, value_) public
    setName(name_)
    setValue(value_)
    return
  method toString() public returns String
    return '('getName()','getValue()')'
 
-- =============================================================================
class RSortCompsiteStructure.PairComparator implements Comparator
  method compare(lft = Object, rgt = Object) public binary returns int
    cRes = int
    if lft <= RSortCompsiteStructure.PairBean, rgt <= RSortCompsiteStructure.PairBean then do
      lName = String (RSortCompsiteStructure.PairBean lft).getName()
      rName = String (RSortCompsiteStructure.PairBean rgt).getName()
      cRes = lName.compareTo(rName)
      if cRes == 0 then do
        lVal = String (RSortCompsiteStructure.PairBean lft).getValue()
        rVal = String (RSortCompsiteStructure.PairBean rgt).getValue()
        cRes = lVal.compareTo(rVal)
        end
      end
    else signal IllegalArgumentException('Arguments must be of type PairBean')
    return cRes
 