试图找出一个数组是否排序
本文关键字:一个 数组 是否 排序 | 更新日期: 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;
}
我做了两个改动:
- 提前返回
false
,但等待返回true
,直到循环结束。 - 您的解决方案将抛出
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);
}