SUBROUTINE SORTIC( N, INDX, CLIST )
SUBROUTINE SORTI1( N, INDX, LIST1 )
SUBROUTINE SORTI2( N, INDX, LIST1, LIST2 )
SUBROUTINE SORTI3( N, INDX, LIST1, LIST2, LIST3 )
SUBROUTINE SORTI4( N, INDX, LIST1, LIST2, LIST3, LIST4 )
SUBROUTINE SORTR1( N, INDX, RLIST1 )
SUBROUTINE SORTR2( N, INDX, RLIST1, RLIST2 )
SUBROUTINE SORTR3( N, INDX, RLIST1, RLIST2, RLIST3 )
SUBROUTINE SORTR4( N, INDX, RLIST1, RLIST2, RLIST3, RLIST4 )
INTEGER N ! table size
INTEGER INDX ( N ) ! Fortran-subscript 1...N table to be sorted
CHARACTER*(*) CLIST ! table of key strings
INTEGER LIST1( N ) ! table of first key-tuple components
INTEGER LIST2( N ) ! table of second key-tuple components
INTEGER LIST3( N ) ! table of third key-tuple components
INTEGER LIST4( N ) ! table of fourth key-tuple components
REAL RIST1( N ) ! table of first key-tuple components
REAL RIST2( N ) ! table of second key-tuple components
REAL RIST3( N ) ! table of third key-tuple components
REAL RIST4( N ) ! table of fourth key-tuple components
void qsortic( int n, /** number of elements **/
int ind[], /** index-array **/
const char tblc[], /** first key-component in tuple **/
const int k ) /** key-length as a Fortran string **/
void qsorti1( int n, /** Dimension for indx, list **/
int indx [], /** subscript table **/
const int list1[] ); /** key table to be sorted **/
void qsorti2( int n, /** Dimension for indx, list **/
int indx [], /** subscript table **/
const int list1[] , /** 2-key table to be sorted **/
const int list2[] ) ;
void qsorti3( int n, /** Dimension for indx, list **/
int indx [], /** subscript table **/
const int list1[] , /** 3-key table to be sorted **/
const int list2[] ,
const int list3[] ) ;
void qsorti4( int n, /** Dimension for indx, list **/
int indx [], /** subscript table **
const int list1[] , /** 4-key table to be sorted **/
const int list2[] ,
const int list3[] ,
const int list4[] ) ;
void qsortr1( int n, /** Dimension for indx, list **/
int indx [], /** subscript table **/
const float list1[] ); /** key table to be sorted **/
void qsortr2( int n, /** Dimension for indx, list **/
int indx [], /** subscript table **/
const float list1[] , /** 2-key table to be sorted **/
const float list2[] ) ;
void qsortr3( int n, /** Dimension for indx, list **/
int indx [], /** subscript table **/
const float list1[] , /** 3-key table to be sorted **/
const float list2[] ,
const float list3[] ) ;
void qsortr4( int n, /** Dimension for indx, list **/
int indx [], /** subscript table **
const float list1[] , /** 4-key table to be sorted **/
const float list2[] ,
const float list3[] ,
const float list4[] ) ;
See also FINDC, FIND1, FIND2, FIND3, FIND4, FINDR1, FINDR2, FINDR3, FINDR4 for lookups according to sorted key-tuple tables, and LOCATC, LOCAT1, LOCAT2, LOCAT3, LOCAT4, LOCATR1, LOCATR2, LOCATR3, LOCATR4 for insertions into sorted key-tuple tables.
...
INTEGER N
PARAMETER ( N = ...
...
INTEGER I
INTEGER INDX ( N ) ! index array to be sorted
INTEGER LIST1( N ) ! input unsorted 3-tuple table
INTEGER LIST2( N ) ! input unsorted 3-tuple table
INTEGER LIST3( N ) ! input unsorted 3-tuple table
REAL DATA1( N ) ! input data table
REAL DATA2( N ) ! input data table
...
DATA LIST1 / 1983, 1980, 1988, 1988, 1990, ...
DATA LIST2 / 1, 5, 4, 11, 7, ...
DATA LIST3 / 10, 3, 15, 19, 20, ...
INTEGER SORTED1( N ) ! sorted 3-tuple table
INTEGER SORTED2( N ) ! sorted 3-tuple table
INTEGER SORTED3( N ) ! sorted 3-tuple table
REAL SDATA1( N ) ! sorted data table
REAL SDATA2( N ) ! sorted data table
...
DO I = 1, N ! initialize INDX array
INDX( I ) = I
END DO
CALL SORTI3( N, INDX, LIST1, LIST2, LIST3 )
DO I = 1, N ! reorder according to INDX array
SORTED1( I ) = LIST1( INDX( I ) )
SORTED2( I ) = LIST2( INDX( I ) )
SORTED3( I ) = LIST3( INDX( I ) )
SDATA1( I ) = DATA1( INDX( I ) )
SDATA2( I ) = DATA2( INDX( I ) )
...
END DO
...
...
#define N ...
...
int i, k, n ;
int ind[ N ] ,
list1[ N ], list2[ N ],
sort1[ N ], sort2[ N ] ;
...
/* get n and list1[i], list2[i], i=0, ..., n-1. Then: */
for( i = 0; i < n ; i++ ) ind[ i ] = i ;
qsorti2( n, ind, list1, list2 ) ;
for( i = 0; i < n ; i++ )
{
k = ind[ i ] ;
sort1[ i ] = list1[ k ] ;
sort2[ i ] = list2[ k ] ;
}
...
SEE ALSO: FIND* Binary Search Routines
SEE ALSO: LOCAT* Binary Search-and-Insert Routines
To: Models-3/EDSS I/O API: The Help Pages