如何检查二维数组是不是从大到小排序
Posted
技术标签:
【中文标题】如何检查二维数组是不是从大到小排序【英文标题】:how to check if the 2D array is sorted from greatest to lowest如何检查二维数组是否从大到小排序 【发布时间】:2020-06-20 04:23:59 【问题描述】:如果我有这样的二维数组
int[,] arr = 0, 1, 4 , 3, 9, 5 , 6, 8, 2 ;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
Console.Write(arr[i, j] + " ");
Console.WriteLine();
结果:
0 1 4
3 9 5
6 8 2
我想检查它是否是从高到低的排序器,例如 8
到 0
我在想可能是一个 bool 类型来检查它是否正确,但我真的不知道这是否可行
【问题讨论】:
您是否希望它仅在对每个后续一维数组进行排序时才返回 true?例如:[9 6 0] [8 5 2] [4 1 3] 您要检查每个单独的行还是整个数组? 这是作业吗? 【参考方案1】:您可以使用Cast
方法将二维数组转换为一维数组。然后确保每个下一项小于或等于上一项,否则数组不按降序排序
int[,] arr = 0, 1, 4 , 3, 9, 5 , 6, 8, 2 ;
var flatten = arr.Cast<int>().ToList();
var isSorted = true;
for (int i = 0; i < flatten.Count() - 1; i++)
if (flatten[i] <= flatten[i + 1])
isSorted = false;
break;
您还可以使用Zip
方法检查数组是否按降序排序
var flatten = arr.Cast<int>();
var isSorted = flatten.Zip(flatten.Skip(1), (current, next) => current >= next).All(x => x);
【讨论】:
hm 我检查了第一个代码,当我有数组 8 7 6 5 4 3 2 1 0 它没有中断 @zellez 它不应该中断,因为数组已经按降序排序并且符合您的标准。仅当数组未排序并设置isSorted = false;
循环之前我们假设数组已排序且isSorted = true
当我运行它时,isSorted = true
与 8 7 6 5 4 3 0 1 2
和 8 7 6 5 4 3 2 0 1
一起为 true,并且不会更改为 false
@zellez 确实如此,刚刚检查了 8, 7, 6, 5, 4, 3, 2, 0, 1
样本,它在最后一次循环迭代中将isSorted
设置为false
。 Zip
方法的结果相同,请仔细检查您的数据【参考方案2】:
如果要检查整个数组是否已排序,可以使用 Linq as
var flattedList = arr.OfType<int>().ToList();
var result = flattedList.OrderByDescending(x=>x).SequenceEqual(flattedList);
【讨论】:
【参考方案3】:对每个后续的一维数组执行排序/检查。这样,您可以检查 x、y 或两者是否按您想要的方式排序。一些排序算法有办法让你知道它们是否是内置排序的。
【讨论】:
以上是关于如何检查二维数组是不是从大到小排序的主要内容,如果未能解决你的问题,请参考以下文章
C语言;编写sort(),使二维数组偶数行从小到大输出,奇数行从大到小输出,编写完错误如下,怎样修改?