Минимальный и максимальный элемент массива с++

Разработать метод-член класса для преобразования одномерного динамического массива таким образом, чтобы его максимальный

элемент стал первым элементом, а минимальный - последним, без упорядочения всего массива.

void min_and_max()
    {
        int min = massive[0];
        int max = massive[0];
        int index_min = 0;
        int index_max = 0;
        for (int i = 1; i < size; i++)
        {
            if (massive[i] > max)
            {
                max = massive[i];
                index_max = i;
            }
            if (massive[i] < min)
            {
                min = massive[i];
                index_min = i;
            }
        }
        massive_new[0] = massive[index_max];
        massive_new[size - 1] = massive[index_min];
        for (int i = 0; i < size; i++)
        {
            if (massive[i] != max && i != index_max)
            {
                massive_new[i + 1] = massive[i];
            }
            else if (massive[i] != min && i != index_min)
            {
                massive_new[i + 1] = massive[i];
            }
        }
        for (int i = 0; i < size; i++)
        {
            cout << massive_new[i] << "\t";
        }
    }

Попробовал так, не вышло, помогите, опытные , только недавно начал учить программирование.


Ответы (1 шт):

Автор решения: AlexGlebe

Вы копируете массив, используя сложный цикл, который использует вспомогательные переменные. Проще и понятнее сначала скопировать массив, а потом поменять места у максимального, минимального элемента.

class C {
public :    
    static  int constexpr size    = 5 ;
    int massive [  size ]  = { 7 , 6 , 9 , 1 , 4 } ;
    int massive_new [  size ]   ;
    void min_and_max();
} ;

# include <iostream>
using std :: cout ;
void C :: min_and_max()
    {
        int min = massive[0];
        int max = massive[0];

        // копируем в новый массив
        massive_new[0] = min ;

        int index_min = 0;
        int index_max = 0;
        for (int i = 1; i < size; i++)
        {

            // копируем в новый массив
            massive_new[i] = massive[i] ;

            if (massive[i] > max)
            {
                max = massive[i];
                index_max = i;
            }
            else  if (massive[i] < min)
            {
                min = massive[i];
                index_min = i;
            }
        }

        // меняем местами в этом новом массиве
        std :: swap ( massive_new[0] , massive_new[index_max] ) ;
        std :: swap ( massive_new[size - 1] , massive_new[index_min] ) ;

        for (int i = 0; i < size; i++)
        {
            cout << massive_new[i] << "\t";
        }
    }

int main(){
    C c ;
    c . min_and_max (   )   ;
}    
→ Ссылка