2 shell33168 shell33168 于 2017.09.18 19:34 提问

递归判断程序是否有序?

public class P37_ArraySort {
public static int isArrayInSortedOrder(int[] array,int index){
if (array.length == 1) {
return 1;
}else{
return (array[index-1]<=array[index-2])?0:isArrayInSortedOrder(array,index-1);
}
}

public static void main(String[] args) {
    int[] arr=new int[]{1,3,4,6,2};
    System.out.println(isArrayInSortedOrder(arr,4));
}

}


这样写会数组下标越界,请问怎么改才能用递归判断?

4个回答

SoundSlow
SoundSlow   2017.09.18 21:09

array[index-1]<=array[index-2]
第一、当前位置需要判断
第二、去掉=号

改为:
array[index]<array[index-1]

shell33168
shell33168 我下面的写法不报越界了,这样写对吗?有比这更简单的算法吗?
2 个月之前 回复
shell33168
shell33168 当前位置需要判断 是什么意思?你这样还是没有解决数组下标越界的问题
2 个月之前 回复
zinpros
zinpros   2017.09.19 09:26

每次都是传入同一个array,array.length == 1这个情况在这个数组的长度不等于1的情况下永远都不会实现。没有出口

shell33168
shell33168   2017.09.18 23:33
public class P31_ArraySort {
    public static int isArrayInSortedOrder(int[] array,int index){
        if (array.length == 1) {
            //1个肯定有序
            return 1;
        }else{
            if (index-2>=0)
            {
                //后面小于前面,无序,返回0
                return (array[index-1]<array[index-2])?0:isArrayInSortedOrder(array,index-1);
            }else{
                //有序 返回1
                return 1;
            }
        }
    }

    public static void main(String[] args) {
        int[] arr=new int[]{1,2,3,4,6,-1};
        System.out.println(isArrayInSortedOrder(arr,6));
    }


}

SoundSlow
SoundSlow   2017.09.19 21:28

1.这样是对的,这个复杂度为(n),应该是最优的了
2.当前位置需要判断是指:
你第一次:
int[] arr=new int[]{1,3,4,6,2};
System.out.println(isArrayInSortedOrder(arr,4));nt[] arr=new int[]{1,3,4,6,2};
这里的数组长度为5,你取了4,最后一个元素2漏掉了

修改后:
int[] arr=new int[]{1,2,3,4,6,-1};
System.out.println(isArrayInSortedOrder(arr,6));
取值6没有漏掉

Csdn user default icon
上传中...
上传图片
插入图片