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

  1. /* +++Date last modified: 05-Jul-1997 */
  2.  
  3. /*
  4. ** quicksort.c -- quicksort integer array
  5. **
  6. ** public domain by Raymond Gardner     12/91
  7. */
  8.  
  9. #include "snipsort.h"
  10.  
  11. static void swap(int *a, int *b)
  12. {
  13.       register int t;
  14.  
  15.       t = *a;
  16.       *a = *b;
  17.       *b = t;
  18. }
  19.  
  20. void quicksort(int v[], unsigned n)
  21. {
  22.       unsigned i, j, ln, rn;
  23.  
  24.       while (n > 1)
  25.       {
  26.             swap(&v[0], &v[n/2]);
  27.             for (i = 0, j = n; ; )
  28.             {
  29.                   do
  30.                         --j;
  31.                   while (v[j] > v[0]);
  32.                   do
  33.                         ++i;
  34.                   while (i < j && v[i] < v[0]);
  35.                   if (i >= j)
  36.                         break;
  37.                   swap(&v[i], &v[j]);
  38.             }
  39.             swap(&v[j], &v[0]);
  40.             ln = j;
  41.             rn = n - ++j;
  42.             if (ln < rn)
  43.             {
  44.                   quicksort(v, ln);
  45.                   v += j;
  46.                   n = rn;
  47.             }
  48.             else
  49.             {
  50.                   quicksort(v + j, rn);
  51.                   n = ln;
  52.             }
  53.       }
  54. }
  55.