Минимальный и максимальный элемент массива с++
Разработать метод-член класса для преобразования одномерного динамического массива таким образом, чтобы его максимальный
элемент стал первым элементом, а минимальный - последним, без упорядочения всего массива.
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 ( ) ;
}