Java中的递归冒泡排序

ran*_*ech 3 java arrays sorting recursion bubble-sort

我正在尝试用Java编写一个Recursive Bubble排序,我正在获得Index Out of Bounds Exception.我做错了什么,为什么我会收到这个错误?这是我的代码:

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]);

    }
Run Code Online (Sandbox Code Playgroud)

此外,即使它对数组进行排序,我最后得到错误,它正在打印所有步骤,如何让它打印最后一个最终排序的数组?可能是一个简单的答案,但我的大脑现在被炒了,不能直接思考.提前致谢.

Ósc*_*pez 10

循环应该停止时i < a.length-1,因为在您的代码中您访问该位置i+1,i == a.length - 1然后i+1将尝试访问不存在的数组末尾的元素 - 因此,超出范围.


Ted*_*opp 5

你已经编写了你的​​循环,所以i就像你一样a.length - 1.然后你试图访问a[i+1],这是一个越界索引时i == a.length - 1.将循环限制降低1.