Задан массив из n целых чисел. Переместить все
минимальные элементы в начало массива, не меняя порядок других.
Вход. В первой строке записано натуральное число n (n ≤ 100). В следующей строке записаны n целых чисел. Все числа по модулю не превышают 100.
Выход. Выведите элементы обновленного массива.
Пример входа |
Пример выхода |
7 6 -3 -7 4
-7 -4 5 |
-7 -7 6 -3 4 -4 5 |
массив
Найдем
минимальный элемент min. Двигаемся
по массиву справа налево и подвигаем неминимальные элементы вправо. Часть
массива, которая останется слева, заполняем минимальным элементом.
Пример
Рассмотрим
пример, приведенный в условии.
Реализация алгоритма
Объявим
рабочий массив.
int m[101];
Читаем входной
массив. Находим минимальный элемент min.
scanf("%d", &n);
min = 100;
for (i = 0; i < n; i++)
{
scanf("%d", &m[i]);
if (m[i] < min) min =
m[i];
}
Объявим два индекса i и j. Двигаемся
по массиву справа налево. Если m[j] не равно минимуму, то копируем это число в m[i].
i = n - 1;
for (j = n - 1; j >= 0; j--)
if (m[j] != min)
{
m[i] = m[j];
i--;
}
Остальные элементы массива c индекса 0 до i следует заполнить минимальным
элементом.
while (i >= 0)
{
m[i] = min;
i--;
}
Выводим результирующий массив.
for (i = 0; i < n; i++)
printf("%d ", m[i]);
printf("\n");