我试图找出用户输入的数组是否已排序(尽管不尝试排序)。如果用户的输入是从最小到最大的升序,我想写一条消息说“输入已排序”,如果不是“用户输入未排序”。
到目前为止,这是我的代码:
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;
}
}
无论在这种情况下是什么,我都会变得真实......
答案 0 :(得分:5)
只要满足第一项和第二项的条件,您的方法就会返回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
,这样更容易。答案 1 :(得分:2)
尝试使用这样的LINQ运算符:
public static bool IsSorted(int[] array, int n)
{
return
array
.Skip(1)
.Zip(array, (a1, a0) => a1 - a0)
.All(a => a >= 0);
}