void qsort(l, u) if l >= u return m = l for i = [l+1, u] /* инвариант: x[l+1..m] < x[l] && x[m+1..i-1] >= x[l] */ if ( x[i] < x[l]) swap(++m, i) swap(l, m) /* о чем писалось в примечании: если этого не сделать - попадаем в беск. цикл, если x[l] - максимальный элемент */ /* x[l..m-1] < x[m] <= x[m+1, u] */ qsort(l, m-1) qsort(m+1, u)