Ошибка в цикле сортировки выбора
Мне нужно сделать программу, которая будет принимать входной файл чисел (integer.txt), которые будут отсортированы по одному числу в строке, в вектор, а затем использовать алгоритм сортировки выборки для сортировки чисел в порядке убывания и записи их в выходной файл (сортировка.формат txt). Я совершенно уверен, что что-то не так в моей функции selectionSort (), что заставляет цикл не получать правильные значения, потому что после тестирования с cout я получаю совершенно неправильный вывод. Я уверен, что это начинающий программист. лох.
vector<string> getNumbers()
{
vector<string> numberList;
ifstream inputFile ("integer.txt");
string pushToVector;
while (inputFile >> pushToVector)
{
numberList.push_back(pushToVector);
}
return numberList;
}
vector<string> selectionSort()
{
vector<string> showNumbers = getNumbers();
int vectorMax = showNumbers.size();
int vectorRange = (showNumbers.size() - 1);
int i, j, iMin;
for (j = 0; j < vectorMax; j++)
{
iMin = j;
for( i = j; i < vectorMax; i++)
{
if(showNumbers[i] < showNumbers[iMin])
{
iMin = i;
}
}
if (iMin != j)
{
showNumbers[j] = showNumbers [iMin];
}
}
return showNumbers;
}
void vectorToFile()
{
vector<string> sortedVector = selectionSort();
int vectorSize = sortedVector.size();
ofstream writeTo;
writeTo.open("sorted.txt");
int i = 0;
while (writeTo.is_open())
{
while (i < vectorSize)
{
writeTo << sortedVector[i] << endl;
i += 1;
}
writeTo.close();
}
return;
}
int main()
{
vectorToFile();
}
2 ответов:
В вашем
selectionSort()единственная команда, которая изменяет вектор, это:Каждый раз, когда элемент управления достигает этой строки, выперезаписываете элемент вектора.showNumbers[j] = showNumbers [iMin];Вы должны научиться менять местами два значения, прежде чем даже думать о сортировке вектора.
Кроме того, ваши функции чрезмерно связаны. Если все, что вы хотите исправить, это
selectionSort, то вы должны иметь возможность опубликовать это плюсmain, который вызывает его с некоторыми тестовыми данными и отображает результат, но нет, ваши функции все звонить друг другу. Научитесь разъединяться.Также ваши имена переменных ужасны.
Comments