需要解释c++中数组从高到低的反转

Need explanation of reversing an array in C++ from high to low

本文关键字:解释 c++ 数组      更新时间:2023-10-16

我是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来排序,你所要做的叫做反转。