用C ++反转数组[关闭]

问题描述 投票:-1回答:3

请检查我的代码反转数组,我找不到错误。它在函数调用之前和之后显示相同的数组,我不知道为什么?

#include <iostream>
using namespace std;

void reverseArray(int *arr, int size)
{
    int *Copy_arr = new int[size];
    int temp;
    for (int i = 0; i < size; i++)
    {
        Copy_arr[i] = arr[i];
    }

    for (int i = 0; i < size; i++)
    {
        temp = arr[i];
        arr[i] = arr[(size - 1) - i];
        arr[(size - 1) - i] = temp;
    }

    cout << "Array before function call was: ";
    for (int i = 0; i < size; i++)
    {
        cout << Copy_arr[i] << " ";
    }
    cout << endl << "Array after function call is: ";
    for (int i = 0; i < size; i++)
    {
        cout << arr[i] << " ";
    }
    cout << endl;
}

void main()
{
    int size;
    cout << "Enter size of array\n";
    cin >> size;
    int *p = new int[size];
    cout << "Enter the elements of array\n";
    for (int i = 0; i < size; i++)
    {
        cin >> p[i];
    }
    reverseArray(p, size);
}
c++ algorithm
3个回答
12
投票

for (int i = 0; i < size; i++)
{
    temp = arr[i];
    arr[i] = arr[(size - 1) - i];
    arr[(size - 1) - i] = temp;
}

你反转数组两次。

arr[0]arr[size - 1]交换为i == 0i == size - 1

它应该是

for (int i = 0; i < size / 2; i++)
{
    std::swap(arr[i], arr[(size - 1) - i]);
}

甚至更简单

std::reverse(arr, arr + size);

-2
投票

问题是你没有使用缓冲区来反转,所以它们现在的方式是反转循环的一半做你想要的,另一半设置回来。在某种程度上它反转了反向阵列。

正如@ Jarod42和@kiran Biradar指出的那样,有更好的方法可以使用标准库中的函数来实现这一点,但我认为你想要在没有库的情况下这样做。

这是一个简单的修复,用Copy_arr替换arr

for (int i = 0; i < size; i++)
{
    temp = Copy_arr[i];
    arr[i] = Copy_arr[(size - 1) - i];
    arr[(size - 1) - i] = temp;
}

-2
投票

您可以使用以下解决方案在C ++中反转数组:

for (int i = 0, j= size - 1; i < j; i++, j--)
{
    swap   = arr[i];
    arr[i] = arr[j];
    arr[j] = swap;
}
© www.soinside.com 2019 - 2024. All rights reserved.