我正在尝试对自己的数据进行简单排序(我知道Array.Sort()
存在),接收用户输入数组,然后调用方法sortMyArray()
对数字进行排序,从最小到最大。当我尝试查找包含0的数组中最小的数字时, except 的作用是什么?
您将看到:每次迭代时,我都会将变量smallest
初始化为值int.MaxValue
,但是如果数组包含0,它将保持设置为int.MaxValue
。
static int findSmallest(int[] original, int[] sorted, int smallest)
{
for (int i = 0; i < sorted.Length; i++)
{
if (original[i] < smallest & !sorted.Contains(original[i]))
{
smallest = original[i];
}
}
return smallest;
}
static int[] sortMyArray(int[] original)
{
int[] sorted = new int[original.Length];
for (int i = 0; i < sorted.Length; i++)
{
int smallest = int.MaxValue;
smallest = findSmallest(original, sorted, smallest);
sorted[i] = smallest;
}
return sorted;
}
sortMyArray(inputArray);
我的问题是,如何确保正确处理0?
该代码的行为与正整数和负整数值相同,但是是什么导致0不起作用?
编辑:例如,如果inputArray包含{5, -1, 7, 0, 33}
,则该方法将返回其排序方式为:{-1, 5, 7, 33, 2147483647}
。
答案 0 :(得分:1)
使用!sorted.Contains(original[i])
可以跳过数组中已经存在的任何值。 sorted
已初始化为所有0
,因此它将永远不会设置smallest = 0
。在sortMyArray
的最后一次迭代中,smallest
等于int.Max
。请注意,当您两次具有相同的元素时,也会发生这种情况。由于您想实现自己的排序方法(而不使用Array.Sort
),因此您应该研究各种排序算法(例如,合并排序,快速排序等),因为这些算法无法按预期工作。