我的选择排序有问题。它没有按升序对列表进行排序,实际上它根据我的调试器没有做任何事情。我注意到,当我在第42行调试它时,它会跳过条件语句,我不明白为什么会这样做。我认为问题出在if语句的第二个for循环中。条件语句是假的,应该是真的。如果你能引导我走向正确的方向,我会很高兴地欣赏。我来这里学习。
#include <iostream>
void sortAscendingOrder(int*, int );
int main()
{
int* array = nullptr;
int input;
std::cout << "Enter the number of testscores you want to enter." <<std::endl;
std::cin >> input;
array = new int[input];
for(int count =0; count < input; count++)
{
std::cout << "Enter the test score" << (count +1) <<":" <<std::endl;
std::cin >> *(array+count);
}
sortAscendingOrder(array,input);
for(int count =0; count < input;count++)
{
std::cout << "\n" << *(array+count);
std::cout << std::endl;
}
return 0;
}
void sortAscendingOrder(int* input,int size)
{
int startScan,minIndex,minValue;
for(startScan =0; startScan < (size-1);startScan++)
{
minIndex = startScan;
minValue = *(input+startScan);
for(int index = startScan+1;index<size;index++)
{
if(*(input+startScan) < minValue) // Here this condition is false.
{
minValue = *(input+index);
minIndex = index;
}
}
*(input+minIndex)=*(input+startScan);
*(input+startScan)=minValue;
}
}
答案 0 :(得分:2)
startScan是查找最小值的起始位置。
if(*(input+startScan) < minValue)
永远不会是真的,左手边和右手边总是相等的。
看起来你想说
if(*(input + index) < minValue)
您的调试器应该能够将*(input + startScan)
的值作为监视或作为未来调试会话的表达式生成。