仅使用System命名空间如何在循环中对比前后元素判断int数组是否升序
C# 实现int数组升序判断的方案
核心思路
你需要的当前元素和前一个元素对比逻辑不需要额外存储变量,直接通过数组下标偏移即可实现:
- 循环从下标
1开始遍历(下标0是首个元素,没有前驱元素无需比较) - 下标为
i时,当前元素是array[i],前一个元素就是array[i-1] - 只要出现任意一处
当前元素 < 前一个元素,即可直接判定数组不是升序,提前终止循环 - 边界场景兼容:长度为0或1的数组天然符合升序要求
正确实现代码
using System; class Program { static bool IsAscending(int[] array) { // 边界处理:空数组或只有1个元素的数组默认是升序 if (array.Length <= 1) return true; // 从第2个元素开始和前一个对比 for (int i = 1; i < array.Length; i++) { // 只要有一个元素比前一个小,就不是升序 if (array[i] < array[i - 1]) { return false; } } // 所有元素都符合升序规则 return true; } static void Main() { int[] arrayName = {1,2,3,4,5}; int[] arrayName2 = {5,4,3,6}; Console.WriteLine(IsAscending(arrayName) ? "数组已按升序排列" : "数组未按升序排列"); Console.WriteLine(IsAscending(arrayName2) ? "数组已按升序排列" : "数组未按升序排列"); } }
说明
这个实现仅用到了System命名空间下的基础功能,没有引入任何类库、扩展方法,完全符合你的要求。你原来的伪代码问题出在对比条件写错了,你写的arrayName[i] < arrayName[i] - 1是把当前元素减1之后和当前元素本身对比,不是和前一个元素对比,所以逻辑才会出错。
内容的提问来源于stack exchange,提问作者Maurice Filiatreault Hebert
相关产品推荐
相关产品推荐

