Как можно поменять местами наибольшее и наименьшее числа в массиве?

Как можно улучшить код на PHP, чтобы создать массив из 5 случайных чисел от 0 до 10, вывести этот массив на экран, а затем найти и вывести наибольшее и наименьшее значения этого массива?
  • 26 января 2024 г. 12:48
Ответы на вопрос 2
Чтобы поменять местами наибольшее и наименьшее числа в массиве, сначала нужно найти их индексы. После этого произведем обмен значениями по этим индексам.

Давайте сначала напишем код на PHP, который создает массив из 5 случайных чисел от 0 до 10 и выводит его на экран:

```php
<?php
// Создаем массив из 5 случайных чисел от 0 до 10
$numbers = array();
for ($i = 0; $i < 5; $i++) {
    $numbers[] = rand(0, 10);
}

// Выводим массив на экран
echo "Исходный массив: ";
print_r($numbers);

// Ищем в массиве наибольшее и наименьшее значения
$maxValue = max($numbers);
$minValue = min($numbers);

// Выводим найденные значения
echo "Наибольшее значение: {$maxValue}\n";
echo "Наименьшее значение: {$minValue}\n";
?>
```

Теперь, чтобы поменять местами наибольшее и наименьшее числа в массиве, добавим следующий код:

```php
// Находим индексы максимального и минимального элементов
$maxIndex = array_search($maxValue, $numbers);
$minIndex = array_search($minValue, $numbers);

// Меняем местами максимальное и минимальное значения
$temp = $numbers[$maxIndex];
$numbers[$maxIndex] = $numbers[$minIndex];
$numbers[$minIndex] = $temp;

// Выводим измененный массив на экран
echo "Массив после обмена наибольшего и наименьшего значений: ";
print_r($numbers);
```

Итоговый код может выглядеть так:

```php
<?php
// Создаем массив из 5 случайных чисел от 0 до 10
$numbers = array();
for ($i = 0; $i < 5; $i++) {
    $numbers[] = rand(0, 10);
}

// Выводим массив на экран
echo "Исходный массив: ";
print_r($numbers);

// Ищем в массиве наибольшее и наименьшее значения
$maxValue = max($numbers);
$minValue = min($numbers);

// Выводим найденные значения
echo "Наибольшее значение: {$maxValue}\n";
echo "Наименьшее значение: {$minValue}\n";

// Находим индексы максимального и минимального элементов
$maxIndex = array_search($maxValue, $numbers);
$minIndex = array_search($minValue, $numbers);

// Меняем местами максимальное и минимальное значения
$temp = $numbers[$maxIndex];
$numbers[$maxIndex] = $numbers[$minIndex];
$numbers[$minIndex] = $temp;

// Выводим измененный массив на экран
echo "Массив после обмена наибольшего и наименьшего значений: ";
print_r($numbers);
?>
```

Код оптимизирован в том смысле, что все операции проводятся в рамках обычного прохода, и не требуется дополнительных циклов для нахождения и обмена значений.
попробуйте представить, как оно будет работать, в замедленном режиме. 
Что, если массив не 5 чисел, а несколько миллионов, длиннющий?
Хорошо бы его проходить только 1 раз.
И по пути находить минимум и максимум, и их индексы.
Прошли весь массив — ок, имеем минимум, максимум, их индексы.
Меняем местами элементы по индексам.
Похожие вопросы