为什么它不在数组中交换两个整数?

时间:2015-05-15 11:26:36

标签: c++ arrays

#include <iostream>
using namespace std;
int main()
{
    int A[6]={3,7,9,4,6,1};
    int max;
    max = A[0];
    for(int i=0; i< 6; i++)
    {
        if(A[i] > max)
        {
            max = A[i];
        }

    }
    //cout << max <<"\n";

    int temp;
    temp=A[0];
    A[0]=max;
    max = temp;

    for(int i=0;i<6;i++)
    {
        cout << A[i] << endl;
    }
    return 0;
}

我想将最大值与decared数组中的第一个值进行交换,但它只将第一个值替换为最大值,而最大值也保留在其位置。

3 个答案:

答案 0 :(得分:0)

您正在使用变量A[0]交换max,而不是您从其获取其值的数组元素。

你可以使max指针,以便它可以用来访问数组元素;或者您可以记住值来自的数组索引。或者您可以使用标准库:

swap(A[0], *max_element(begin(A), end(A)));

答案 1 :(得分:0)

max只是一个整数,它不指向数组中的任何位置,因此分配它不会更改数组。您可以将max更改为指针,以便更改它会更改它指向的值:

int main()
{
    int A[6]={3,7,9,4,6,1};
    int *max;
    max = &A[0];
    for(int i=0; i< 6; i++)
    {
        if(A[i] > *max)
        {
            max = &A[i];
        }   
    }

    int temp;
    temp=A[0];
    A[0]=*max;
    *max = temp;

    for(int i=0;i<6;i++)
    {
        cout << A[i] << endl;
    }
    return 0;
}

答案 2 :(得分:0)

逻辑略有错误。实际上,您正在交换变量max的值而不是具有max值的元素。

如果要将元素与最大值交换,请跟踪其位置,如下所示:

 if(A[i] > max)
    {
        max = A[i];
        pos = i;
    }

在交换时,请按如下方式使用:

int temp;
temp=A[0];
A[0]=A[pos];
A[pos] = temp;

注意:另一种方法是使用指针,这只是一个简单的非指针方法。