home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / snip9707.zip / STRSORT.C < prev    next >
C/C++ Source or Header  |  1997-07-05  |  1KB  |  51 lines

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /*
  4. **  strsort() -- Shell sort an array of string pointers via strcmp()
  5. **  Written in ANSI C and optimized for size under Borland TC and BC++.
  6. **
  7. **  Public domain by Raymond Gardner 12/05/91   :-)
  8. **  based on a public domain version by Thad Smith 12/05/91,
  9. **  based on a public domain version by
  10. **  Ray Gardner   Denver, CO   12/88
  11. */
  12.  
  13. #include <string.h>
  14. #include "snipsort.h"
  15.  
  16. void STRSORT(char **v, unsigned n)
  17. {
  18.       register unsigned int gap;
  19.       unsigned int i, j;
  20.       register char **a;
  21.       char **b;
  22.  
  23.       gap = 0;
  24.       do
  25.       {
  26.             gap <<= 1;
  27.       } while (++gap < n);
  28.  
  29.       while ((i = (gap >>= 1)) != 0)
  30.       {
  31.             for ( ; (j = i) < n; i++)
  32.             {
  33.                   a = v + j;
  34.                   do
  35.                   {
  36.                         j -= gap;
  37.                         b = a;
  38.                         a -= gap;
  39.                         if (strcmp(*a, *b) > 0)
  40.                         {
  41.                               register char *tmp;
  42.                               tmp = *a;
  43.                               *a = *b;
  44.                               *b = tmp;
  45.                         }
  46.                         else  break;      /* better have this break! */
  47.                   } while (j >=  gap);
  48.             }
  49.       }
  50. }
  51.