因此,我对排序结构写的排序函数有问题。

我最初的想法是要有一个while循环,直到不发生任何变化为止,并且内部有一个for循环经过一个array[10],比较两个彼此相邻的元素。如果下一个元素大于上一个元素,则将它们交换,并将迭代器扔回零。

除了第一个元素(不是最高元素)以外,其他所有东西都可以工作。从第二到最后,一切都很好。

有什么指针可以指出我犯错的地方吗?代码对我来说似乎很好...
我知道我可以使用<algorithm>,但是我应该为此编写自己的函数。

void izvadaPecRez(Pari masivs[])
{
    Pari temp;
    bool change;
    int i;
    while(change!=false)
    {
        for(i=0;i<10;i++)
        {
            if(masivs[i+1].kopejais>masivs[i].kopejais)
            {
                temp=masivs[i];
                masivs[i]=masivs[i+1];
                masivs[i+1]=temp;
                change=true;
                i=0;
            }
            else
            {
                change=false;
            }
        }
    }

    for(i=0;i<10;i++)
        printone(masivs, i);
}

最佳答案

i=0即将在for循环中的增量运行之前发生,因此该语句的作用将是下一个循环中的i==1。获得预期行为的最简单方法是在交换元素后从for循环中仅break(不用担心,它只会中断for循环,而不会破坏while循环)。您还应该只在while循环的顶部设置change=false,而不是在不交换元素时进行设置。

10-06 05:08