Java中的递归冒泡排序

时间:2011-10-17 18:40:45

标签: java arrays sorting recursion bubble-sort

我正在尝试用Java编写递归冒泡排序,并且我正在获得索引超出边界的异常。我做错了什么,为什么我会收到这个错误? 这是我的代码:

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 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

您已编写循环,以便ia.length - 1一样。然后,您尝试访问a[i+1],这是i == a.length - 1时的越界索引。将循环限制降低1.

答案 2 :(得分:2)

上限应为length-1

for(int i=0;i<a.length-1;i++)

答案 3 :(得分:-1)

试试这个。

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