как поменять местами два максимальных элемента в одном массиве?

#arrays #c #max #swap

Вопрос:

Я думал о том,как я могу поменять местами эти два элемента из данного массива, например, если я нахожу два максимума в одном массиве и хочу поменять их местами, как я могу это сделать без использования другого массива ?

 #include <stdio.h>

int main()
{
int n,i;
int arr[100];



scanf("%d",amp;n);
for(i = 0;i < n;i  ){
    scanf("%d",amp;arr[i]);
}

//1 2 3 4 5
 

например, этот массив должен быть 1 2 3 5 4

 int max1 = arr[0],max2 = arr[0];
for(i = 0;i < n;i  ){
    if(max1 < arr[i]){
        max2 = max1;
        max1 = arr[i];

    }
    else if(max2 < arr[i]){
        max2 = arr[i];
    }

}
printf("%d %d",max1,max2);
return 0;
}
 

Комментарии:

1. Один из этих двух максимумов не является максимумом.

2. Не просто следите за максимальными значениями, которые вы нашли. Также следите за индексом массива, в котором вы их нашли. if(max1 < arr[i]) { max = arr[i]; maxi = i; }

3. Может быть только один…..:)

Ответ №1:

Вместо определения max1 и max2 как значений массива определите их как индексы. Например

 int max1 = 0, max2 = 0;
for ( i = 1;i < n; i   ){
    if( arr[max1] < arr[i] ){
        max2 = max1;
        max1 = i;

    }
    else if( arr[max2] < arr[i]){
        max2 = i;
    }
}

if ( max1 != max2 amp;amp; arr[max1] != arr[max2] )
{
    int tmp = arr[max1];
    arr[max1] = arr[max2];
    arr[max2] = tmp;
}

printf("%d %d",arr[max1],arr[max2]);
 

Или вы можете безоговорочно поменять местами элементы.

 int tmp = arr[max1];
arr[max1] = arr[max2];
arr[max2] = tmp;
 

Комментарии:

1. @4386427 В общем случае, когда, например, у вас есть массив структур, вы должны условно поменять местами элементы массива. Я использовал общий подход. В этом конкретном случае вы можете безоговорочно поменять местами элементы.