Положительные элементы массива переместить в начало, а отрицательные — в конец - C (СИ)
Формулировка задачи:
Дана последовательность чисел неизвестной длинны. Нужно заполнить массив этими числами, а потом в отдельной функции положительные элементы массива переместить в начало, а отрицательные — в конец. Количество перемещений должно быть не больше, чем n+O(1), n — размер массива. Так же нельзя использовать дополнительные массивы.
Мне бы хотя бы алгоритм, хотя бы идею
Решение задачи: «Положительные элементы массива переместить в начало, а отрицательные — в конец»
textual
Листинг программы
int* Grouping(int array[], size_t size) { int* a = array; // Указатель на первый элемент массива int* b = array + size - 1; // Указатель на последний элемент массива // Выполняем до тех пор, пока указатели не пересекутся while (a < b) { // Слева ищем отрицательный элемент for (; (a < b) && (0 < *a); ++a) { ; } // Справа ищем положительный элемент for (; (a < b) && (*b < 0); --b) { ; } // Если указатели не пересеклись, то меняем значения местами if (a < b) { Swap(a++, b--); } } return array; }
Объяснение кода листинга программы
Вот что делает этот код:
- Инициализирует два указателя:
a
указывает на первый элемент массива, аb
указывает на последний элемент массива. - Входит в цикл, который будет выполняться до тех пор, пока
a
меньшеb
. - Внутри цикла, он ищет отрицательный элемент слева от
a
и сдвигает положительные элементы вправо отb
. - Как только
a
иb
пересекаются, он меняет значения местами с помощью функцииSwap
. - После завершения цикла, он возвращает массив. Код работает следующим образом:
- Входной массив: [1, -2, 3, -4, 5, -6, 7, -8, 9, -10]
- Первый проход:
a
начинает с 1 и проходит до -2 (останавливается на первом отрицательном элементе).b
начинает с 10 и проходит до -10 (останавливается на последнем отрицательном элементе).- Меняет значения местами: -2 и -10.
- Второй проход:
a
начинает с -2 и проходит до 3 (останавливается на первом положительном элементе).b
начинается с -10 и проходит до 3 (останавливается на последнем положительном элементе).- Меняет значения местами: -2, 3 и -10.
- Третий проход:
a
начинается с 3 и проходит до 5 (останавливается на первом отрицательном элементе).b
начинается с 3 и проходит до 7 (останавливается на последнем положительном элементе).- Меняет значения местами: 3, 5 и 7.
- Четвертый проход:
a
начинается с 5 и проходит до 7 (останавливается на первом положительном элементе).b
начинается с 7 и проходит до 10 (останавливается на последнем отрицательном элементе).- Меняет значения местами: 5, 7 и 10.
- Пятый проход:
a
начинается с 7 и проходит до 9 (останавливается на первом положительном элементе).b
начинается с 10 и проходит до 10 (останавливается на последнем положительном элементе).- Меняет значения местами: 7, 9 и 10. В результате получаем: [-10, -8, -6, -4, 1, 3, 5, 7, 9, 10].
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д