试图找到最小整数时评估0

时间:2018-08-07 13:22:02

标签: c# arrays sorting zero

我正在尝试对自己的数据进行简单排序(我知道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}

1 个答案:

答案 0 :(得分:1)

使用!sorted.Contains(original[i])可以跳过数组中已经存在的任何值。 sorted已初始化为所有0,因此它将永远不会设置smallest = 0。在sortMyArray的最后一次迭代中,smallest等于int.Max。请注意,当您两次具有相同的元素时,也会发生这种情况。由于您想实现自己的排序方法(而不使用Array.Sort),因此您应该研究各种排序算法(例如,合并排序,快速排序等),因为这些算法无法按预期工作。