试图找到最小整数时计算 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),因此您应该研究各种排序算法(即合并排序、快速排序等),因为您的算法无法按预期工作。