
   void Select3(Type a[], int n, int k)
   // Rearrange a[] such that a[k] is the k-th smallest.
   {
       int i, j, q;
       if (k <= n/2)
          for (i=1; i<=k; i++) {
              q = i; Type min = a[i];
              for (j = i+1; j <= n; j++) {
                  if (a[j] < min) {q = j; min = a[j];}
              }
              Interchange(a, q, i);
          }
       else
          for(i=n; i>=k; i--) {
             q = i; Type max = a[i];
             for (j=(i-1); j>=1; --j) {
                if (a[j] > max) {q = j; max = a[j];}
             }
             Interchange(a, q, i);
          }
   }

