需要解释c++中数组从高到低的反转
Need explanation of reversing an array in C++ from high to low
我是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--) {
你这样做的方式,你基本上是交换数组中的第一个元素和数组中的最后一个元素并朝它们移动到数组的中间。
像这样的数组:1、2、3、4、5
第一次迭代将交换1和5。第二次迭代将交换2和4。第三次迭代不会交换任何内容。
此时,你的数组看起来像:5、4、3、2、1
第三次迭代i = j.
如果没有I <</p>
第四次迭代将再次交换4和2。第五次迭代将再次交换5和1。因此,您的数组将变成:
1, 2, 3, 4, 5。
所以i <J条件对于反转升序数组至关重要。i><10部分是多余的。>
边注:
使用std::sort
似乎算法只是简单地从外到内切换元素。下面是发生的事情:
{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之后翻转。
- (i = 5, j = 4){100、90、80、70、60、50岁,40岁,30岁,20日10}
如果在此之后继续,它将再次交换元素5和4,结果是…
{100,90,80,70,**50**,**60**,40,30,20,10}
现在的方式,你只需要i <J是有条件的。>
注意,这不是一个真正的排序机制,因为排序机制是基于数组的顺序,而不是它的内容。真正的排序算法根据high -> low、low -> high或其他一些不正常的规则来排列数组的元素。该算法只是将数组的顺序颠倒一下。
你可以使用std::sort来排序,你所要做的叫做反转。
- 请解释"函数1(p1,p2,p3);"的输出
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 被解释为低级别const的const对象的地址
- 计算每个节点的树高,帮助我解释这个代码解决方案
- MSVC将仅移动结构参数解释为指针
- 内联程序集printf将整数解释为地址
- 有人能解释一下为什么下界是这样工作的吗C++的
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 有人能为我解释一下C++代码吗
- 你能解释一下什么运行时错误是如何解决它的吗?
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 有人可以向我解释为什么控制台输出 0 吗?
- 有人可以解释一下这段代码如何能够反转字符串
- 在 C++ 中解释多维向量的语句时感到困惑
- 解释一下 for (char c : str) 的作用?
- 确切地说,如何解释 std::getline(stream, string) 函数在C++中填充的字符串
- 隐式重新解释引用时强制转换,没有警告/错误
- 有人可以在 c++ 中解释数组的这种输入
- 有人可以解释一下这个矩阵幂函数是如何工作的吗?