Переставить числа так, чтобы сначала шли только 0, затем только 1, затем только 2 - C (СИ)

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

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

Даны целые числа A[1],A[2],A[3],...,A[n], каждое из которых является либо 0, либо 1, либо 2. Переставить числа так, чтобы сначала шли только 0, затем только 1, затем только 2.

Решение задачи: «Переставить числа так, чтобы сначала шли только 0, затем только 1, затем только 2»

textual
Листинг программы
#include <stdio.h>
 
void array_csort(int a[], int n){
    int i, j, k, cs[3] = { 0, 0, 0 };
    for(i = 0; i < n; ++i)
        ++cs[a[i]];
    
    for(k = i = 0; i < 3; ++i){
        for(j = 0; j < cs[i]; ++j)
            a[k++] = i;
    }
}
 
int main(void) {
    int i;
    int a[] = { 2, 1, 2, 1, 2, 2, 0, 2, 2, 1, 2 };  
    int n   = sizeof(a)/sizeof(a[0]);
 
    array_csort(a, n);
    for(i = 0; i < n; ++i)
        printf("%d ", a[i]);
    return 0;
}

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

В этом коде реализована сортировка массива методом подсчёта количества каждого значения и перестановкой элементов в соответствии с полученными счётчиками.

  1. В первой строке определяется функция с именем array_csort, которая принимает два аргумента: массив a и его размер n.
  2. Внутри функции создаётся вспомогательный массив cs, который будет использоваться для подсчёта количества каждого значения. Тип этого массива — int, а размер — 3, так как предполагается, что в массиве a могут быть только три различных значения.
  3. Далее в цикле происходит подсчёт количества каждого значения в массиве a с помощью оператора инкремента ++cs[a[i]].
  4. После подсчёта количества, в цикле происходит перестановка элементов массива a в соответствии с полученными счётчиками. Для этого используется два вложенных цикла: внешний — для перебора счётчиков от 0 до 2 (индексов вспомогательного массива cs) и внутренний — для перебора элементов с соответствующим индексу счётчика значением.
  5. В конце функции происходит вызов функции array_csort с передачей в неё массива a и его размера n.
  6. В функции main создаётся массив a, инициализированный значениями 2, 1, 2, 1, 2, 2, 0, 2, 2, 1, 2.
  7. Размер массива n вычисляется как результат деления размера массива a на размер одного элемента (sizeof(a) / sizeof(a[0])).
  8. Вызывается функция array_csort, передавая в неё массив a и его размер n.
  9. В цикле происходит вывод отсортированного массива a на экран с помощью оператора printf.
  10. Функция main возвращает 0, что означает успешный конец работы программы.

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


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

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

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