Не ахти конечно но вполне приемлемый алгоритм. Портирован с VCL