试图找到最小整数时计算 0 失败
Evaluating 0 when trying to find the smallest integer fails
我正在尝试自己进行简单排序(我知道 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}
,则该方法将 return 排序为:{-1, 5, 7, 33, 2147483647}
。
使用 !sorted.Contains(original[i])
可以跳过数组中已有的任何值。 sorted
被初始化为所有 0
,因此它永远不会设置 smallest = 0
。在 sortMyArray
中的最后一次迭代中,smallest
将等于 int.Max
。请注意,当您两次使用相同的元素时也会发生这种情况。由于您想实现自己的排序方法(而不是使用 Array.Sort
),因此您应该研究各种排序算法(即合并排序、快速排序等),因为您的算法无法按预期工作。
我正在尝试自己进行简单排序(我知道 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}
,则该方法将 return 排序为:{-1, 5, 7, 33, 2147483647}
。
使用 !sorted.Contains(original[i])
可以跳过数组中已有的任何值。 sorted
被初始化为所有 0
,因此它永远不会设置 smallest = 0
。在 sortMyArray
中的最后一次迭代中,smallest
将等于 int.Max
。请注意,当您两次使用相同的元素时也会发生这种情况。由于您想实现自己的排序方法(而不是使用 Array.Sort
),因此您应该研究各种排序算法(即合并排序、快速排序等),因为您的算法无法按预期工作。