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));
}
}
这样写会数组下标越界,请问怎么改才能用递归判断?
array[index-1]<=array[index-2]
第一、当前位置需要判断
第二、去掉=号
改为:
array[index]<array[index-1]
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));
}
}
每次都是传入同一个array,array.length == 1这个情况在这个数组的长度不等于1的情况下永远都不会实现。没有出口
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没有漏掉
这段代码是有问题的,但是网上好多这么写的,,都是互相抄的么