/* ECP: FILEname=fig14_32.cpp */ /* 1*/ // Shellsort an array of arbitrary pointers. /* 2*/ template /* 3*/ void /* 4*/ Shellsort( Etype *A[ ], const unsigned int N ) /* 5*/ { /* 6*/ unsigned int Gap; /* 7*/ Etype *Tmp; /* 8*/ unsigned int i, j; // Loop counters. /* 9*/ for( Gap = N/2; Gap > 0; /*10*/ Gap = Gap == 2 ? 1 : ( unsigned int ) ( Gap / 2.2 ) ) /*11*/ for( i = Gap; i < N; i++ ) /*12*/ { /*13*/ Tmp = A[ i ]; /*14*/ for( j = i; j >= Gap && *Tmp < *A[ j - Gap ]; j -= Gap ) /*15*/ A[ j ] = A[ j - Gap ]; /*16*/ A[ j ] = Tmp; /*17*/ } /*18*/ }