因此,我对排序结构写的排序函数有问题。
我最初的想法是要有一个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
,而不是在不交换元素时进行设置。