Monday, 30 April 2012

Snippet of Quick Sort in C++


template <class T> inline void QS(T *item, long n)
{
   T pivot, tE;
   long l, r, i;

   while(n > 1)
   {
     r = n-1;
     l = 1;
     i = r / 2;
     pivot = item[i];
     item[i] = item[0];
     while (1)
     {
        while (pivot > item[l] && l < r) l++;
        while (pivot <= item[r] && r >= l) r--;
        if (l >= r) break;
        tE = item[l];
        item[l] = item[r];
        item[r] = tE;
        r--; l++;
     }
     item[0] = item[r];
     item[r] = pivot;
     if (n < 3) return;
     i = n - r - 1;
     if (r > i)
     {
        QS(item + r + 1, n - r - 1);
        n = r; 
     }
     else
     {
        QS(item, r);
        item += r + 1;
        n = i;
     }
  }
}

No comments:

Post a Comment