Упорядочить массив: отрицательные элементы в начале массива, потом нулевые, а в конце положительные - 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы: iostream.h и algorithm.h
- Объявляем функцию
array_part
, которая принимает три аргумента: начало и конец массива и функцию сравнения. Внутри функции объявляем четыре указателя:p
,i
,j
иt
. Значениеp
меняется в процессе сортировки и указывает на текущий элемент, который нужно сравнить.i
иj
используются для обмена элементов. - Используем цикл
for
для прохода по всем элементам массива от начала до конца. Внутри цикла проверяем условие с помощью функции сравнения. Если условие истинно, то производим обмен элементов с помощью циклаfor
в обратном порядке. Значениеp
увеличивается на единицу после каждой итерации внешнего цикла. - Объявляем две функции сравнения:
negative
иzero
. Функцияnegative
возвращаетtrue
, если число отрицательное, иfalse
в противном случае. Функцияzero
возвращаетtrue
, если число равно нулю, иfalse
в противном случае. - В функции
main
создаем массивa
и инициализируем его значениями. Вычисляем размер массива в байтах и количество элементов в массиве. - Сначала сортируем массив по отрицательным элементам, вызывая функцию
array_part
и передавая в качестве аргумента функциюnegative
. Затем сортируем полученный результат по нулевым элементам, вызывая функциюarray_part
и передавая в качестве аргумента функциюzero
. - Используем цикл
for
для вывода отсортированного массива на экран. - Возвращаем
0
в конце программы, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д