我一直在尝试做一些简单的事情,比如使用2个嵌套的for循环来反转数组,但我一直在这样做时遇到麻烦。
#include <iostream>
using namespace std;
int main() {
int arr[] = {1,2,3};
int index = 0;
int length = sizeof(arr)/sizeof(arr[0]);
int temp;
// Before reverse
cout<<endl;
for (int j = 0; j < length; j++)
{
cout<<arr[j]<<" ";
}
for(int l = 0; l < length-index; l++)
{
// swap elements
for(int i = 0; i < length-1; i++)
{
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
index++;
}
// After Reverse
cout<<endl;
for (int k = 0; k < length; k++)
{
cout<<arr[k]<<" ";
}
}
单独使用这个for循环,我可以得到第一个索引到末尾。然而,当我使用另一个for循环时,我尝试减少长度,这样第一个索引,被移动到末尾,就不会被移动,但它不起作用。第一个指数在年底继续移动,我不希望这种情况发生
for(int i = 0; i < length-1; i++)
{
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
请帮帮我
1条答案
按热度按时间pnwntuvh1#
正如目前所写的,您的“反向”算法试图通过与相邻元素交换来使元素在数组中冒泡。这不仅效率很低,而且根本行不通。
你可以使用swap来反转数组,但是你应该从数组的每一端开始。例如,交换第一个和最后一个元素,然后交换第二个和倒数第二个元素,* 等等 *,直到到达数组的中间。
这里我们只使用标准库的
std::swap
函数。这里没有使用名称空间限定符,因为您导入了整个std
名称空间--这通常不是一个好主意,但没关系。但是如果你可以使用标准库的
swap
,你也可以使用reverse
!完整示例:否则,实现您自己的
swap
和reverse
: