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

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

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

Помогите, пожалуйста, написать программу на языке Си: Дан одномерный массив А, состоящий из N элементов. Перенести в начало массива все положительные элементы, а в конец массива - все отрицательные. Заранее большое спасибо!)

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

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

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

  1. В функции array_part происходит сортировка массива по заданному условию (в данном случае, положительные числа в начало, отрицательные в конец).
  2. В функции compare определяется условие сравнения (в данном случае, больше 0).
  3. В функции main создается и инициализируется массив a.
  4. Задается переменная n, которая содержит размер массива.
  5. Вызывается функция array_part, которая сортирует массив по условию.
  6. В цикле выводятся элементы отсортированного массива.
  7. Программа возвращает 0, заканчивая свое выполнение.

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


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

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

7   голосов , оценка 3.429 из 5

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

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

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