home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / CTECHAPP.ZIP / STRATEGY.ZIP / QSORT.CPP < prev    next >
C/C++ Source or Header  |  1990-02-12  |  1KB  |  67 lines

  1. //  Module:     QSort
  2. //  Version:    1.00
  3. //
  4. //  Language:   C++ 2.0
  5. //  Environ:    Any
  6. //
  7. //  Purpose:    A QuickSort for arrays
  8. //
  9. //  Written by: Scott Robert Ladd
  10.  
  11. #include "QSort.hpp"
  12.  
  13. extern "C"
  14.     {
  15.     #include "string.h"
  16.     }
  17.  
  18. void QuickSortArray::Sort(void * arrayPtr, int arrayLen, int itemSize,
  19.                           int (* CompareFunc)(void * item1, void * item2))
  20.     {
  21.     SortArray::Sort(arrayPtr, arrayLen, itemSize, CompareFunc);
  22.  
  23.     temp = new char [Size];
  24.  
  25.     QSRecursive(1,arrayLen);
  26.  
  27.     delete temp;
  28.     }
  29.  
  30. void QuickSortArray::QSRecursive(int l, int r)
  31.     {
  32.     int i, j;
  33.     void * x, * y;
  34.  
  35.     i = l;
  36.     j = r;
  37.     x = ItemPtr((l + r) / 2);
  38.  
  39.     do  {
  40.         while (Compare(ItemPtr(i), x))
  41.             ++i;
  42.  
  43.         while (Compare(x, ItemPtr(j)))
  44.             --j;
  45.  
  46.         if (i <= j)
  47.             {
  48.             x = ItemPtr(i);
  49.             y = ItemPtr(j);
  50.  
  51.             memcpy(temp,x,Size);
  52.             memcpy(x,y,Size);
  53.             memcpy(y,temp,Size);
  54.  
  55.             ++i;
  56.             --j;
  57.             }
  58.  
  59.         if (l < j)
  60.             QSRecursive(l,j);
  61.  
  62.         if (i < r)
  63.             QSRecursive(i,r);
  64.         }
  65.     while (i <= j);
  66.     }
  67.