Перенести в начало массива все положительные элементы, а в конец массива - все отрицательные - C (СИ)
Формулировка задачи:
Помогите, пожалуйста, написать программу на языке Си:
Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все положительные элементы, а в конец массива - все отрицательные.
Заранее большое спасибо!)
Решение задачи: «Перенести в начало массива все положительные элементы, а в конец массива - все отрицательные»
textual
Листинг программы
#include <stdio.h>
int* array_part(int* fa, int* la, int (*cmp)(int)){
int t, *p = fa;
while((fa != la) && (*cmp)(*fa))
++fa;
for(p = fa; fa != la; ++fa){
if((*cmp)(*fa)){
t = *fa;
*fa = *p;
*p++ = t;
}
}
return p;
}
static int compare(int n) { return (n > 0); }
int main(void){
int i;
int a[] = { -1, -2, -3, 1, -4, 2, 3, -5, 4, 5, -6, 6, 7, -7, 8, -9, 9 };
int n = sizeof(a)/sizeof(a[0]);
array_part(a, a + n, compare);
for(i = 0; i < n; ++i)
printf("%d ", a[i]);
return 0;
}
Объяснение кода листинга программы
- В функции
array_partпроисходит сортировка массива по заданному условию (в данном случае, положительные числа в начало, отрицательные в конец). - В функции
compareопределяется условие сравнения (в данном случае, больше 0). - В функции
mainсоздается и инициализируется массивa. - Задается переменная
n, которая содержит размер массива. - Вызывается функция
array_part, которая сортирует массив по условию. - В цикле выводятся элементы отсортированного массива.
- Программа возвращает 0, заканчивая свое выполнение.