Задание 3. Сортировки 2

3.1 Сортировка подсчетом

Дан массив из N элементов, которые принимают значения от 0 до 127. Отсортируйте этот массив в порядке возрастания элементов.

Входные данные

В первой строке число 1N21051 \le N \le 2*10^5 — количество элементов в массиве. Во второй строке — массив чисел разделенных пробелом. Каждое число в диапазоне [0, 127].

16
124 68 57 0 93 60 24 71 125 70 87 83 105 34 30 15

Выходные данные

Вывести упорядоченный по возрастанию массив чисел через пробел.

0 15 24 30 34 57 60 68 70 71 83 87 93 105 124 125

Шаблон кода

import java.util.List;

public class CountingSort implements Sorting<Integer> {
    @Override
    public void sort(List<Integer> nums) {
	// TODO
    }
}

3.2 Цифровая сортировка

Дан массив из N чисел, каждое из которых — это 20-разрядное число в десятичной системе счисления. Реализуйте сортировку по возрастанию этих чисел.

Требуется реализовать цифровую(radix) сортировку.

Входные данные

4
19446744073709551657
18446744073709551616
18446744073709551629
18446744073709551633

Выходные данные

18446744073709551616
18446744073709551629
18446744073709551633
19446744073709551657

Шаблон кода

import java.math.BigInteger;
import java.util.List;

public class RadixSort implements Sorting<BigInteger> {
    @Override
    public void sort(List<BigInteger> nums) {
	// TODO
    }
}

3.3 Сохранение обобщения

Все сортировки 2 и 3 блока реализовывали шаблонный интерфейс Sorting, заменяя в реализациях шаблонный тип на какой-то конкретный. В этой задаче сделайте новую реализацию любой из сортировок этих блоков, в которой сохранится шаблонный тип, а значит возможность сортировать любой тип, который реализует стандартный интерфейс Comparable.

Протестируйте такую реализацию сортировки разных типах данных, например:

  • Integer
  • String
  • LocalDateTime
  • Student (из задачи 2.3)
  • UUID