Положительные элементы массива переместить в начало, а отрицательные — в конец - 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;
}

Объяснение кода листинга программы

Вот что делает этот код:

  1. Инициализирует два указателя: a указывает на первый элемент массива, а b указывает на последний элемент массива.
  2. Входит в цикл, который будет выполняться до тех пор, пока a меньше b.
  3. Внутри цикла, он ищет отрицательный элемент слева от a и сдвигает положительные элементы вправо от b.
  4. Как только a и b пересекаются, он меняет значения местами с помощью функции Swap.
  5. После завершения цикла, он возвращает массив. Код работает следующим образом:
  6. Входной массив: [1, -2, 3, -4, 5, -6, 7, -8, 9, -10]
  7. Первый проход:
    • a начинает с 1 и проходит до -2 (останавливается на первом отрицательном элементе).
    • b начинает с 10 и проходит до -10 (останавливается на последнем отрицательном элементе).
    • Меняет значения местами: -2 и -10.
  8. Второй проход:
    • a начинает с -2 и проходит до 3 (останавливается на первом положительном элементе).
    • b начинается с -10 и проходит до 3 (останавливается на последнем положительном элементе).
    • Меняет значения местами: -2, 3 и -10.
  9. Третий проход:
    • a начинается с 3 и проходит до 5 (останавливается на первом отрицательном элементе).
    • b начинается с 3 и проходит до 7 (останавливается на последнем положительном элементе).
    • Меняет значения местами: 3, 5 и 7.
  10. Четвертый проход:
    • a начинается с 5 и проходит до 7 (останавливается на первом положительном элементе).
    • b начинается с 7 и проходит до 10 (останавливается на последнем отрицательном элементе).
    • Меняет значения местами: 5, 7 и 10.
  11. Пятый проход:
    • a начинается с 7 и проходит до 9 (останавливается на первом положительном элементе).
    • b начинается с 10 и проходит до 10 (останавливается на последнем положительном элементе).
    • Меняет значения местами: 7, 9 и 10. В результате получаем: [-10, -8, -6, -4, 1, 3, 5, 7, 9, 10].

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы