Переставить числа так, чтобы сначала шли только 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; }
Объяснение кода листинга программы
В этом коде реализована сортировка массива методом подсчёта количества каждого значения и перестановкой элементов в соответствии с полученными счётчиками.
- В первой строке определяется функция с именем array_csort, которая принимает два аргумента: массив a и его размер n.
- Внутри функции создаётся вспомогательный массив cs, который будет использоваться для подсчёта количества каждого значения. Тип этого массива — int, а размер — 3, так как предполагается, что в массиве a могут быть только три различных значения.
- Далее в цикле происходит подсчёт количества каждого значения в массиве a с помощью оператора инкремента ++cs[a[i]].
- После подсчёта количества, в цикле происходит перестановка элементов массива a в соответствии с полученными счётчиками. Для этого используется два вложенных цикла: внешний — для перебора счётчиков от 0 до 2 (индексов вспомогательного массива cs) и внутренний — для перебора элементов с соответствующим индексу счётчика значением.
- В конце функции происходит вызов функции array_csort с передачей в неё массива a и его размера n.
- В функции main создаётся массив a, инициализированный значениями 2, 1, 2, 1, 2, 2, 0, 2, 2, 1, 2.
- Размер массива n вычисляется как результат деления размера массива a на размер одного элемента (sizeof(a) / sizeof(a[0])).
- Вызывается функция array_csort, передавая в неё массив a и его размер n.
- В цикле происходит вывод отсортированного массива a на экран с помощью оператора printf.
- Функция main возвращает 0, что означает успешный конец работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д