Подсчет Сортировка реализации - PullRequest
0 голосов
/ 04 октября 2018

Здравствуйте. У меня проблемы с реализацией метода сортировки в Java.Я полагаю, что проблема связана с двумя последними циклами, которые у меня есть в методе.Я получаю исключение ArrayIndexOutOfBounds: 8. Я полагаю, что это происходит от моего второго до последнего цикла for, когда в индексе 5 значение равно 8, но я не уверен, как решить эту проблему.Любая помощь приветствуется.Спасибо!

В моем коде k - самое высокое значение во входном массиве.

Код:

public static void main(String[] args) {
    int [] arrayOne = {0,1,1,3,4,5,3,0};
    int [] output = Arrays.copyOf(arrayOne, arrayOne.length);
    System.out.println(Arrays.toString(arrayOne));
    countingSort(arrayOne, output, 5);
    System.out.println(Arrays.toString(output));

}

public static void countingSort(int[] input, int[] output , int k){
    int [] temp = Arrays.copyOf(input, k+1);

    for (int i = 0; i <= k; i++){
        temp[i] = 0;
    }

    for (int j = 0; j <= input.length - 1; j++){
        temp[input[j]] = temp[input[j]] + 1;
    }

    for (int i = 1; i <= k; i++){
        temp[i] = temp[i] + temp[i-1];
    }

    for (int j = input.length; j >= 1; j--){
        output[temp[input[j]]] = input[j];
        temp[input[j]] = temp[input[j]] - 1;
    }
}

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

это может помочь, но попробуйте использовать метод Arraya.sort ().Например:

//A Java program to sort an array of integers in ascending order.
// A sample Java program to sort an array of integers 
// using Arrays.sort(). It by default sorts in 
// ascending order 
import java.util.Arrays; 

public class SortExample 
{ 
    public static void main(String[] args) 
    { 
        // Our arr contains 8 elements 
        int[] arr = {13, 7, 6, 45, 21, 9, 101, 102}; 

        Arrays.sort(arr); 

        System.out.printf("Modified arr[] : %s", 
                          Arrays.toString(arr)); 
    } 
}

Примером является фрагмент из https://www.geeksforgeeks.org/arrays-sort-in-java-with-examples/

0 голосов
/ 04 октября 2018
import java.util.Arrays;

public class CountingSort {
    public static void main(String[] args) {
        int[] input = {0,1,1,3,4,5,3,0};
        int[] output = new int[input.length];
        int k = 5; // k is the largest number in the input array
        System.out.println("before sorting:");
        System.out.println(Arrays.toString(input)); 
        output = countingSort(input, output, k);
        System.out.println("after sorting:");
        System.out.println(Arrays.toString(output));
    }

    public static int[] countingSort(int[] input, int[] output, int k) {
        int counter[] = new int[k + 1]; 
        for (int i : input) { counter[i]++; } 
        int ndx = 0; 
        for (int i = 0; i < counter.length; i++) {
            while (0 < counter[i]) { 
                output[ndx++] = i;
                counter[i]--; 
            }
        }
        return output;
    }
}

Код выше адаптирован из: http://www.java67.com/2017/06/counting-sort-in-java-example.html

0 голосов
/ 04 октября 2018

Проблема в первом цикле, потому что длина массива temp равна 6, и вы выполняете там 7 взаимодействий.

Итак, в конце for он пытается сделать temp[6]=0, а последняя позиция вашего массива - temp[5].

. Чтобы исправить это, измените ваш первый цикл на:

for (int i = 0; i < k; i++){

В последнем цикле вы получите то же исключение, поскольку input[8] не существует.

...