La primera iteracion busca el minimo, el segundo elimina cuando el minimo queda en primer lugar, pero el tercer while puede dejar al minimo en primer lugar y toma en cuenta el siguiente . No se , me parece que el tercer while deberia estar dentro del segundo pero hay un end .