最简单可靠的方式是线性遍历比较相邻元素:升序时若arr[i] < arr[i-1]则返回false,降序时若arr[i] > arr[i-1]则返回false;空或单元素数组默认有序;时间复杂度O(n),优于排序后对比的O(n log n)。

直接遍历比较相邻元素,是最简单可靠的方式。只要发现任意一处 arr[i-1] > arr[i],就说明不是升序;若全程没触发,就是升序有序。降序同理,只需把大于号换成小于号。
升序判断:一次遍历搞定
从索引 1 开始,逐个检查当前元素是否不小于前一个元素:
- 如果
arr[i] < arr[i-1]成立,立刻返回false - 遍历结束都没返回,说明严格升序(或非严格升序,取决于需求)
- 空数组或单元素数组默认视为有序,可直接返回
true
示例代码:
static boolean isSortedAsc(int[] arr) {
if (arr == null || arr.length <= 1) return true;
for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) return false;
}
return true;
}支持升序/降序的通用判断
可以加一个参数控制方向,避免重复逻辑:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
-
ascending = true:检查是否升序(arr[i] < arr[i-1]是违规) -
ascending = false:检查是否降序(arr[i] > arr[i-1]是违规) - 同样需处理边界情况(null、长度 ≤1)
注意“有序”的定义是否包含相等
日常说的“有序”通常指**非严格有序**,即允许相邻元素相等(如 [1,2,2,3,5] 算升序)。上面的判断默认按此标准。如果需要**严格单调**(不允许相等),就把条件中的 < 或 > 换成 <= 或 >= 即可。
不推荐用排序后对比的方式
有人想先复制数组、调用 Arrays.sort(),再用 Arrays.equals() 对比——这会带来额外空间和时间开销(O(n log n)),完全没必要。线性扫描 O(n) 就够了,且不修改原数组。

















