java - 无法检查数组是否使用递归排序
问题描述
这就是问题:如果数组的每个元素小于或等于下一个元素,则对数组进行排序(按升序)。
编写一个名为 isSorted 的布尔值方法,该方法接受一个整数数组和数组中的元素个数,并返回数组是否已排序。
在显示代码之前:我的逻辑是 if else-if 和 else 语句应该首先确定数组的大小是 0、1 还是 2。这是因为当大小等于 1 或 2 时,程序必须中断。当大小大于 2 时,程序应检查 arr[size-1] > arr[size-2],然后再次调用该方法,如果为真则减小大小,如果不为真则返回假。当我运行该程序时,以下 2 个测试失败:[1,3,2,4] 和 [2,1,2,3,4]。因此,我指定当大小等于 2 时,如果 arr[0] > arr[1] 则该方法返回 false,但它不起作用。我究竟做错了什么?我不想只查找答案,因为我正在为考试而学习,所以如果有重复的答案,我很抱歉。
我知道循环更好我只是想研究递归
public boolean isSorted(int[] arr, int size) {
if(size == 0 || size == 1) {
return true;
} else if (size == 2) { //this is the part I don't get.
if (arr[0] > arr[1]) {
return false;
} else {
isSorted(arr,size-1);
return true;
}
} else {
if (arr[size-1] < arr[size-2]) {
return false;
} else {
isSorted(arr, size-1);
return true;
}
}
}
解决方案
递归不是解决这个问题的好方法。如果您的阵列非常大并且您可以获得StackOverflowError
. 为什么不使用简单的if
运算符:
public static boolean isSorted(int[] arr, int size) {
if (arr.length >= 2)
for (int i = 1; i < arr.length; i++)
if (arr[i - 1] > arr[i])
return false;
return true;
}
推荐阅读
- synchronization - RClone (OneNote) 的 OneDrive 同步问题
- load-balancing - HAProxy 中的自定义负载均衡逻辑
- javascript - Next / React JS 无限渲染组件 onClick
- pytorch - 使用 PyTorch 进行数据集量化
- angular - 如何自动设置 mat-option 元素宽度以适应选项值
- raspberry-pi - 信息亭模式下的 Chromium 88 数据泄漏
- android - 在 Room Migrations 中访问旧的 Room 数据库
- python - Safari 网络推送通知 APNS 返回 200 状态,但通知未发送到设备
- flutter - Flutter-Non-nullable instance field '{0}' must be initialized 错误
- scala - 使用maven执行场景时如何设置环境变量?