void Exchange(int a[], int i, int j)
{
  if (i != j)
  {
    int tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
  }
}

int Partion(int a[], int begin, int end)
{
  int i = begin - 1;
  int j = end + 1;

    int value = a[begin];

  while (1)
  {
    do {
      i++;
    } while(a[i] < value);

      do {
      j--;
    } while(a[j] > value);

    if (i < j)
    {
      Exchange(a, i, j);
    }
    else
    {
      return j;
    }
  }
}

void Qsort(int a[], int begin, int end)
{
  if (begin < end)
  {
    int j = Partion(a, begin, end);

      Qsort(a, begin, j);
    Qsort(a, j + 1, end);
  }
}