нужна помощь для получения массива, подсчета частоты, помещения другого массива с индексом массива, действующим на число, и отдельным значением, действующим в качестве частоты в Java
Вы можете отсортировать большой массив из m целых чисел, которыев диапазоне от 1 до n с помощью подсчета массива из n записей для подсчета количества вхождений каждого целого числа в массиве. Например, рассмотрим следующий массив A из 14 целых чисел в диапазоне от 1 до 9 (обратите внимание, что в этом случае m = 14 и n = 9):
9 2 4 8 9 4 3 2 8 1 2 7 2 5
Формирует счетчик массива из 9такие элементы, что count [i-1] содержит количество раз, которое я встречаю в массиве для сортировки. Таким образом, число равно
1 4 1 2 1 0 1 2 2
В частности,
count[0] = 1
, поскольку 1 встречается один раз в A. - count [1] = 4, так как происходит 24 раза в A.
- count [2] = 1, поскольку 3 встречается один раз в A.
- count [3] = 2, поскольку 4 встречается 2 раза в A.
Используйте массив count для сортировки исходного массива A. Реализуйте этот алгоритм сортировки в функции
public static void countingSort(int[] a, int n )
и проанализируйте время его наихудшего случая в терминах m (длина массива a) и n,После вызова countingSort () a должен быть отсортированным массивом (не сохранять результат сортировки во временном массиве).
edit: это то, что я пробовал
public static void countingSort1(int[] a, int n) {
int [] temp = new int[n];
int [] temp2 = new int[n];
int visited = -1;
for (int index = 0; index < n; index++) {
int count = 1;
for (int j = index +1; j < n; j++) {
if(a[index] == a[j]) {
count++;
temp[j] = visited;
}
}
if (temp[index]!= visited) {
temp[index] = count;
}
}
for(int i = 1; i < temp.length; i++) {
if (temp[i] != visited) {
System.out.println(" " +a[i] + " | " +temp[i]);
}
}
Просто чтобыпосчитать частоту, но я думаю, что я делаю это неправильно