如何检查二维数组是不是从大到小排序

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

我想检查它是否是从高到低的排序器,例如 80 我在想可能是一个 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 = true8 7 6 5 4 3 0 1 28 7 6 5 4 3 2 0 1 一起为 true,并且不会更改为 false @zellez 确实如此,刚刚检查了 8, 7, 6, 5, 4, 3, 2, 0, 1 样本,它在最后一次循环迭代中将isSorted 设置为falseZip 方法的结果相同,请仔细检查您的数据【参考方案2】:

如果要检查整个数组是否已排序,可以使用 Linq as

var flattedList = arr.OfType<int>().ToList();
var result = flattedList.OrderByDescending(x=>x).SequenceEqual(flattedList);

【讨论】:

【参考方案3】:

对每个后续的一维数组执行排序/检查。这样,您可以检查 x、y 或两者是否按您想要的方式排序。一些排序算法有办法让你知道它们是否是内置排序的。

【讨论】:

以上是关于如何检查二维数组是不是从大到小排序的主要内容,如果未能解决你的问题,请参考以下文章

二维数组的排序

二维数组的排序

如何将数组中的数字从大到小排序?

C语言;编写sort(),使二维数组偶数行从小到大输出,奇数行从大到小输出,编写完错误如下,怎样修改?

java数组排序问题:array.sort()是从小到大排序,那么如何从大到小排序?

数组从小到大排序,从大到小排序