
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.




      INSTALL @lib$+"SORTSALIB"
      sort% = FN_sortSAinit(0,0)
 
      DIM pair{name$, number%}
      DIM array{(10)} = pair{}
      FOR i% = 1 TO DIM(array{()}, 1)
        READ array{(i%)}.name$, array{(i%)}.number%
      NEXT
 
      DATA "Eight", 8, "Two", 2, "Five", 5, "Nine", 9, "One", 1
      DATA "Three", 3, "Six", 6, "Seven", 7, "Four", 4, "Ten", 10
 
      C% = DIM(array{()}, 1)
      D% = 1
      CALL sort%, array{()}, array{(0)}.number%, array{(0)}.name$
 
      FOR i% = 1 TO DIM(array{()}, 1)
        PRINT array{(i%)}.name$, array{(i%)}.number%
      NEXT