Упорядочить массив: отрицательные элементы в начале массива, потом нулевые, а в конце положительные - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задан массив, содержащий N элементов. Требуется переприсвоить его элементы так, чтобы отрицательные элементы оказались в начале массива, нулевые следующими, а в конце положительные. При этом в каждой из групп должен сохраниться исходный порядок элементов. Помогите пожалуйста :C

Решение задачи: «Упорядочить массив: отрицательные элементы в начале массива, потом нулевые, а в конце положительные»

textual
Листинг программы
#include <stdio.h>
 
int* array_part(int* f, int* l, int (*pcmp)(int)){
    int* p, *i, *j, t;
    for(p = i = f; i != l; ++i){
        if((*pcmp)(*i)){
            for(j = i; j > p; --j){
                t  = *j;
                *j = *(j - 1);
                *(j - 1) = t;
            }
            ++p;
        }
    }
    return p;
}
 
int negative(int n) { return (n < 0);  }
int zero(int n)     { return (n == 0); }
 
int main(void){
    int* p;
    int  a[] = { 0, 1, -1, 2, -2, 3, -3, 0, -4, -5, 4, 5, 6, -6, 7, 0, -7 }; 
    int  n   = sizeof(a)/sizeof(a[0]);
 
    p = array_part(a, a + n, &negative);
    p = array_part(p, a + n, &zero);
 
    for(p = &a[0]; p != &a[n]; ++p)
        printf("%d ", *p);
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы: iostream.h и algorithm.h
  2. Объявляем функцию array_part, которая принимает три аргумента: начало и конец массива и функцию сравнения. Внутри функции объявляем четыре указателя: p, i, j и t. Значение p меняется в процессе сортировки и указывает на текущий элемент, который нужно сравнить. i и j используются для обмена элементов.
  3. Используем цикл for для прохода по всем элементам массива от начала до конца. Внутри цикла проверяем условие с помощью функции сравнения. Если условие истинно, то производим обмен элементов с помощью цикла for в обратном порядке. Значение p увеличивается на единицу после каждой итерации внешнего цикла.
  4. Объявляем две функции сравнения: negative и zero. Функция negative возвращает true, если число отрицательное, и false в противном случае. Функция zero возвращает true, если число равно нулю, и false в противном случае.
  5. В функции main создаем массив a и инициализируем его значениями. Вычисляем размер массива в байтах и количество элементов в массиве.
  6. Сначала сортируем массив по отрицательным элементам, вызывая функцию array_part и передавая в качестве аргумента функцию negative. Затем сортируем полученный результат по нулевым элементам, вызывая функцию array_part и передавая в качестве аргумента функцию zero.
  7. Используем цикл for для вывода отсортированного массива на экран.
  8. Возвращаем 0 в конце программы, чтобы указать, что программа успешно завершилась.

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


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

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

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