我是C ++的初学者,可能是一个非常基本的问题,但我不明白这一点。我有一个数组{10,20,30,40,50,60,70,80,90,100};我想像{100,90,80,70,60,50,40,30,20,10}那样打印出来。我也有以下代码:
#include <iostream>
using namespace std;
int main()
{
int ara[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
int i, j, temp;
for(i = 0, j = 9; i < 10 && i<j; i++, j--) {
temp = ara[j];
ara[j] = ara[i];
ara[i] = temp;
}
for(i = 0; i < 10; i++) {
cout<<ara[i]<<endl;
}
return 0;
}
但我不确定为什么我在下面的行中使用&& i<j
。如果我不使用它,那么我的数组输出就像{10,20,30,40,50,60,70,80,90,100};
我想要一个明确的解释,以便我能理解。
for(i = 0, j = 9; i < 10 && i<j; i++, j--) {
答案 0 :(得分:4)
你正在这样做的方式,你基本上是用数组中的最后一个元素交换数组中的第一个元素,并在数组中间向它们方向前进。
像数组一样: 1,2,3,4,5
第一次迭代将交换1和5.第二次迭代将交换2和4.第三次迭代不会交换任何内容。
此时您的数组将如下所示:
5,4,3,2,1
在第三次迭代中,i = j。
如果你没有i&lt; j条件,for循环将继续迭代。
第四次迭代将再次交换4和2。第五次迭代将再次交换5和1。因此,您的数组将成为:
1,2,3,4,5再次。
所以i&lt; j条件对于反转上升数组至关重要。 i&lt; 10部分是多余的。
旁注:
使用std :: sort
可能要容易得多答案 1 :(得分:2)
似乎算法只是简单地从外部切换元素。这就是发生的事情:
{10, 20, 30, 40, 50, 60, 70, 80, 90, 100} -> {**100**, 20, 30, 40, 50, 60, 70, 80, 90, **10**}
{**100**, 20, 30, 40, 50, 60, 70, 80, 90, **10**} -> {**100**, **90**, 30, 40, 50, 60, 70, 80, **20**, **10**}
等等。
然而,一旦到达中心就需要停止;否则,它会在i = 5和j = 4之后翻转。
如果在此之后继续,它将再次切换元素5和4,从而产生......
{100,90,80,70,**50**,**60**,40,30,20,10}
现在的方式,你只需要i&lt; j条件是正确排序这个。
请注意,这不是真正的排序机制,因为排序机制基于数组的顺序,而不是其内容。真正的排序算法基于高 - &gt;排列数组的元素。低,低 - &gt;高,或其他一些不正常的规则。这个算法简单地翻转了数组的顺序。
答案 2 :(得分:1)
你可以使用std :: sort进行排序。你要做的事情叫做倒车..