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

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

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

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

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

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int* array_part(int* f, int* l, int (*pcmp)(int)){
  4.     int* p, *i, *j, t;
  5.     for(p = i = f; i != l; ++i){
  6.         if((*pcmp)(*i)){
  7.             for(j = i; j > p; --j){
  8.                 t  = *j;
  9.                 *j = *(j - 1);
  10.                 *(j - 1) = t;
  11.             }
  12.             ++p;
  13.         }
  14.     }
  15.     return p;
  16. }
  17.  
  18. int negative(int n) { return (n < 0);  }
  19. int zero(int n)     { return (n == 0); }
  20.  
  21. int main(void){
  22.     int* p;
  23.     int  a[] = { 0, 1, -1, 2, -2, 3, -3, 0, -4, -5, 4, 5, 6, -6, 7, 0, -7 };
  24.     int  n   = sizeof(a)/sizeof(a[0]);
  25.  
  26.     p = array_part(a, a + n, &negative);
  27.     p = array_part(p, a + n, &zero);
  28.  
  29.     for(p = &a[0]; p != &a[n]; ++p)
  30.         printf("%d ", *p);
  31.     return 0;
  32. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы