Подсчет сортировки - PullRequest
       6

Подсчет сортировки

0 голосов
/ 16 апреля 2020
public static void countingSort(Integer[] a, int n) {
        //TODO
        //COMPLETE THIS METHOD
        int[] counter = new int[n+1];
        int[] sorted = new int[a.length];
        Arrays.fill(counter,0);
        // fills counter array with each number count
        for ( int i = 0 ; i < a.length; i++){
            counter[a[i]] += 1;
        } // adds n-1 index + n index
        for (int i = 1; i < counter.length; i++) {
            counter[i] = (counter[i] + counter[i-1]);
        } // shifts array to the right
        for (int i = counter.length-1; i > 0; i--) {
            counter[i] = counter[i-1];
        } // fills sorted array with the sorted out counts
        for (int i = 0; i < a.length; i++ ){
            sorted[counter[a[i]]] = a[i];
            counter[a[i]]++;
        }
    }

При запуске он выбрасывает массив из связанного исключения в теле первого для l oop. У меня проблемы с просмотром, если кто-то может помочь мне, это будет очень ценно.

1 Ответ

0 голосов
/ 16 апреля 2020

При запуске он выбрасывает массив из связанного исключения в теле первого для l oop.

Это было бы так:

        for ( int i = 0 ; i < a.length; i++){
            counter[a[i]] += 1;
        }

У меня проблемы с видением, если бы кто-нибудь мог помочь мне, я был бы очень признателен.

ArrayIndexOutOfBoundsException в этой банке oop означает, что вы превышаете границы a или counter. Из проверки видно, что вы не выходите за пределы a (хотя вы могли бы как исключить эту возможность, так и сделать код немного чище, переключившись на улучшенный for l oop). Единственная оставшаяся возможность состоит в том, что вы выходите за пределы counter.

Подход, который вы реализовали, поддерживает только неотрицательные целые числа во входном массиве и требует, чтобы метод вызова метода передал верхнюю границу для значения элемента в качестве второго параметра. Если эти ограничения не выполняются, то будет сгенерировано исключение, которое вы наблюдаете.

То есть, если исключение выдается там, где вы говорите, проблема заключается в вводе.

...