Могу реализовать разные сортировки, но с сортировкой подсчетом встречаюсь впервые.
Как реализовать этот алгоритм?Не получается запустить счетчик
int nums[] = {1, 3, 1, 2, 4, 4, 3, 2, 3, 1};
int a[] = new int[10];
int count[] = {};
int i, j;
for (i = 0; i < 4; i++) {
count[i] = 0;
}
for (j = 0; j < 10; j++) {
count[nums[j]] = count[nums[j]] + 1;
System.out.println(count[j]);
}
Сортировка подсчетом подразумевает создание корзин (buckets), в каждой из которых хранится количество элементов исходного массива, значение которых совпадает с индексом корзины. Соответственно, нужно иметь корзины, индексы которых будут от минимального значения массива до максимального.
При использовании массива для хранения корзин индексы будут от 0 до X. Чтобы при этом можно было работать с отрицательными числами, а также чтобы не хранить ненужные значения от 0 до минимального значения из массива, имеет смысл перед сортировкой (или непосредственно перед добавлением в корзину) вычесть из всех элементов массива минимум, а после сортировки (при извлечении из корзины) - добавить его обратно.
В итоге получается так:
public static void sort(int[] array)
{
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int element : array)
{
if (element < min)
{
min = element;
}
if (element > max)
{
max = element;
}
}
int[] buckets = new int[max - min + 1];
for (int element : array)
{
buckets[element - min]++;
}
int arrayIndex = 0;
for (int i = 0; i < buckets.length; i++)
{
for (int j = buckets[i]; j > 0; j--)
{
array[arrayIndex++] = i + min;
}
}
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники