首页 文章

选择排序循环中的错误

提问于
浏览
2

我需要创建一个程序来接受一个数字输入文件(integer.txt),它将每行排序一个数字,放入一个向量中,然后使用选择排序算法按降序对数字进行排序并将它们写入输出文件(sorted.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 回答

  • 0

    vectorRange已定义但未使用 .

  • 0

    selectionSort() 中,唯一更改向量的命令是:

    showNumbers[j] = showNumbers [iMin];
    

    每次控件到达该行时,都会覆盖向量的元素 .

    You must learn to swap two values, before you even think about sorting a vector.

    此外,您的功能过度耦合 . 如果你要修复的只是 selectionSort ,那么你应该能够发布一个 main ,用一些测试数据调用它并显示结果,但不是,你的函数都互相调用 . 学会解耦 .

    你的变量名也很糟糕 .

相关问题