自学内容网 自学内容网

【C++】C++应用案例-翻转数组

        翻转数组,就是要把数组中元素的顺序全部反过来。比如一个数组{1,2,3,4,5,6,7,8},翻转之后就是{8,7,6,5,4,3,2,1}。

  • (1)另外创建数组,反向填入元素

数组是将元素按照顺序依次存放的,长度固定。所以如果想要让数组“翻转”,一种简单的思路是:直接创建一个相同长度的新数组,然后遍历所有元素,从末尾开始依次反向填入就可以了。

#include<iostream>
using namespace std;

int main()
{
const int n = 8;
int arr[n] = { 1,2,3,4,5,6,7,8 };

// 1. 直接创建一个新数组,遍历元素反向填入
int newArr[n];
for (int i = 0; i < n; i++)
{
newArr[n-i-1] = arr[i];
}

// 打印数组
for (int i = 0; i < n; i++)
{
cout << newArr[i] << "\t";
}
cout << endl;


}

需要注意原数组下标为i的元素,对应翻转后的新数组下标为n-i-1(n为数组长度)。

  • (2)基于原数组翻转

另建数组的方式很容易实现,但有明显的缺点:需要额外创建一个数组,占用更多的内存。最好的方式是,不要另开空间,就在原数组上调整位置。

这种思路的核心在于:我们应该有两个类似“指针”的东西,每次找到头尾两个元素,将它们调换位置;而后指针分别向中间逼近,再找两个元素对调。由于数组中下标是确定的,因此可以直接用下标代替“指针”。

#include<iostream>
using namespace std;

int main()
{
const int n = 8;
int arr[n] = { 1,2,3,4,5,6,7,8 };

// 2. 双指针分别指向数组头尾,元素对调
int head = 0, tail = n - 1;
while(head < tail)
{
int temp = arr[head]; 
arr[head] = arr[tail];
arr[tail] = temp;

// 指针向中间移动
++head;
--tail;
}
// 打印数组
for (int i = 0; i < n; i++)
{
cout << arr[i] << "\t";
}
cout << endl;

}

结果输出:


原文地址:https://blog.csdn.net/weixin_63106307/article/details/140725098

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!