试图找出一个数组是否排序

本文关键字:一个 数组 是否 排序 | 更新日期: 2023-09-27 17:50:36

我试图找出用户输入的数组是否排序(不试图对其进行排序)。如果用户的输入是按从小到大的升序排列的,我想写一条消息说"输入已排序",如果不是"用户输入未排序"。

这是我到目前为止的代码:

public static void Main()
{
    int[] array = new int[20];
    int n = 0;
    char Continue;
    InputArray(array, ref n);
    IsSorted(array, n);
    Console.WriteLine("{0}", IsSorted(array, n));
    do{

        Console.Write("Would you like to continue? Y/N : ");
        Continue = Convert.ToChar(Console.ReadLine());
        Continue = char.ToUpper(Continue);
      }while(Continue != 'N');
}
    public static void InputArray(int[] array, ref int n)
{
    int i = 0;
    Console.Write("Enter a number of elements under 20: ");
    n = Convert.ToInt32(Console.ReadLine());
    if (n < 0 || n > 20)
    {
        Console.Write("Please enter a number greater than zero and less than 20: ");
        n = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Enter the {0} elements:", n);
        for (i = 0; i < n; ++i)
            array[i] = Convert.ToInt32(Console.ReadLine());
    }
    else
    {
        Console.WriteLine("Enter the {0} elements:", n);
        for (i = 0; i < n; ++i)
            array[i] = Convert.ToInt32(Console.ReadLine());
      }
}
   public static bool IsSorted(int[] array, int n)
{
    for (int i = 0; i < array.Length; i++)
        if (array[i] > array[i + 1])
        {
            return true;
        }
        return false;      
}
}

试图找出一个数组是否排序

只要满足第一项和第二项的条件,您的方法就返回true,而不检查所有其他元素。

public static bool IsSorted(int[] array, int n)
{
    for (int i = 1; i < array.Length; i++)
    {
        if (array[i - 1] > array[i])
        {
            return false;
        }
    }
    return true;
}

我做了两个改动:

  1. 提前返回false,但等待返回true,直到循环结束。
  2. 您的解决方案将抛出ArrayOutOfBoundException,因为i + 1索引访问。从i = 1开始,转到i < array.Lenght,在索引器中使用i - 1更容易。

试试这样使用LINQ操作符:

public static bool IsSorted(int[] array, int n)
{
    return
        array
            .Skip(1)
            .Zip(array, (a1, a0) => a1 - a0)
            .All(a => a >= 0);  
}