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

Why it doesn't swap two integers in an array?

本文关键字:两个 整数 交换 数组 为什么      更新时间:2023-10-16
#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;
}

我想将最大值与已列录数组中的第一个值交换,但它仅替换1个值,而最大值也保留在其位置。

逻辑有点错。实际上,您将可变max的值交换为max值。

如果您想将元素与最大值交换,请跟踪其位置,例如:

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

和交换时,使用如下:

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

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

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

您可以将max作为指针,以便可以用于访问数组元素。或者,您可能会记住该值来自的数组索引。或者您可以使用标准库:

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

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;
}