所以,我对这个排序函数有问题,我写它来排序结构。
我最初的想法是有一个 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
,而不是在您不交换元素时设置它。
关于c++ - 带有结构的自定义排序功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23810881/