Ваша проблема в том, что вы пытаетесь основывать свои циклы на фактических значениях в векторе, а не на индексах в векторе.
Так что, если ваш вектор генерируется случайным образом, и вы говорите это:
for( pos = v[0]; pos < v[30]; ++pos)
Есть вероятность, что значение в v [0] больше, чем v [30]. Таким образом, цикл никогда не будет работать. Я вижу ту же проблему в этом цикле:
for( i = v[pos + 1]; i < v[30]; ++i)
Так что я бы рекомендовал использовать индексы для реального цикла. Попробуйте что-то вроде:
for( pos = 0; pos < 30; ++pos)
{
min = v[pos];
и т.д ...
РЕДАКТИРОВАТЬ: Как упомянуто ниже, было бы также лучше, чтобы ваш цикл основывался на размере вектора. Однако, чтобы уберечь себя от вызова дорогостоящего метода size () при каждом запуске цикла, просто захватите размер до начала цикла. Например:
size_t size = v.size();
for(size_t pos = 0; pos < size; ++pos)