选择排序指针问题

时间:2017-02-17 06:22:54

标签: c++ sorting

我的选择排序有问题。它没有按升序对列表进行排序,实际上它根据我的调试器没有做任何事情。我注意到,当我在第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;
    }
}

1 个答案:

答案 0 :(得分:2)

startScan是查找最小值的起始位置。

if(*(input+startScan) < minValue)

永远不会是真的,左手边和右手边总是相等的。

看起来你想说

if(*(input + index) < minValue)

您的调试器应该能够将*(input + startScan)的值作为监视或作为未来调试会话的表达式生成。