Рекурсивная пузырьковая сортировка на Java - PullRequest
3 голосов
/ 17 октября 2011

Я пытаюсь написать рекурсивный пузырьковый вид на Java, и я получаю исключение Index Out of Bounds.Что я делаю не так и почему я получаю эту ошибку?Вот мой код:

public static  <T extends Comparable< ? super T>>
    void sort(T [] a){
    T tmp;
    for(int i=0;i<a.length;i++){
        if(a[i].compareTo(a[i+1])>0){
            tmp = a[i];
            a[i]=a[i+1];
            a[i+1]=tmp;
            sort(a);
        }
        System.out.println("i:"+i+" "+a[i]);

    }

Кроме того, даже если он сортирует массив, и я получаю ошибку в конце, он печатает все шаги, как мне заставить его напечатать последний окончательный отсортированный массив?Возможно, это простой ответ, но мой мозг сейчас зажжен и не может мыслить прямо.Заранее спасибо.

Ответы [ 4 ]

10 голосов
/ 17 октября 2011

Цикл должен остановиться, когда i < a.length-1, потому что в вашем коде вы получаете доступ к позиции i+1, а когда i == a.length - 1, тогда i+1 будет пытаться получить доступ к элементу из конца массива, который не существовать - следовательно, вне границ.

5 голосов
/ 17 октября 2011

Вы написали свой цикл так, что i получает бит a.length - 1.Затем вы пытаетесь получить доступ к a[i+1], который является недопустимым индексом, когда i == a.length - 1.Уменьшите предел вашего цикла на 1.

2 голосов
/ 17 октября 2011

Верхний предел должен быть длина-1

for(int i=0;i<a.length-1;i++)
0 голосов
/ 30 ноября 2016

Попробуйте это.

 public static void bubbleSort(Object[] source, int fromIndex, int endIndex){
            if(fromIndex==endIndex){
                return;
            }
            else{
                if(((Comparable) source[fromIndex]).compareTo(source [fromIndex+1])>0){
                    Object temp=source[fromIndex];
                    source[fromIndex]=source[fromIndex+1];
                    source[fromIndex+1]=temp;
                }
                bubbleSort(source,fromIndex+1,endIndex);
            }
            bubbleSort(source,fromIndex,endIndex-1);
        }
...