1

我在 c# 中开发了一个程序,它正在执行“插入排序”,代码获取元素的最大值和元素的值,然后一一显示排序值的步骤。

代码:

    static void insertionSort(int[] ar)
    {
        for (int i = 1; i < ar.Length; i++)
        {
            int temp = ar[i];
            int j = i - 1;

            while (j >= 0 && ar[j] > temp)
            {
                ar[j + 1] = ar[j];

                foreach (int val in ar)
                    Console.Write(val + " ");
                Console.WriteLine();

                j--;
            }
        }


    }

    static void Main(String[] args)
    {

        int ar_size;
        ar_size = Convert.ToInt32(Console.ReadLine());
        int[] ar = new int[ar_size];
        for (int i = 0; i < ar_size; i++)
        {
            ar[i] = Convert.ToInt32(Console.Read());
        }

        insertionSort(ar);
        Console.ReadKey();
    }

我提供的示例输入:

5
2 4 6 8 3

输出: 在此处输入图像描述

谁能解释我为什么会这样!

任何帮助将不胜感激!:)

4

1 回答 1

2

除了排序本身的问题之外,结果中出现奇怪数字的原因是您使用的Console.Read非常错误。它返回用户输入的字符的 ASCII 值。此外,它将返回所有输入字符的 ASCII 值,而不仅仅是数字。

因此,第一次调用Console.Read()将返回 50(的 ASCII 值'2')。
第二次调用将返回 32(空格的 ASCII 值)。
第三次调用将返回 52(ASCII 值'4')。
等等

要解决此问题,请像这样初始化ar

var numbers = Console.ReadLine().Split(' ');
for (int i = 0; i < ar_size; i++)
    ar[i] = Convert.ToInt32(numbers[i]);

请注意,此代码缺少错误处理。在以下情况下会抛出异常:

  1. 用户输入了除空格和数字之外的任何内容
  2. 用户输入的数字少于他在第一行中指定的数字
于 2013-02-18T14:50:55.857 回答