我在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输出:

,有人能解释一下为什么会发生这种事吗!
任何帮助都将不胜感激!:)
发布于 2013-02-18 14:50:55
除了排序本身的问题外,结果中出现奇怪数字的原因是您使用Console.Read非常错误。它返回用户输入的字符的ASCII值。此外,它将返回所有输入字符的ASCII值,而不仅仅是数字。
因此,第一个对Console.Read()的调用将返回50 ('2'的ASCII值)。
第二个调用将返回32 (空格的ASCII值)。
第三个调用将返回52 ('4'的ASCII值)。
等。
要解决这个问题,请像下面这样初始化ar:
var numbers = Console.ReadLine().Split(' ');
for (int i = 0; i < ar_size; i++)
ar[i] = Convert.ToInt32(numbers[i]);请注意,此代码缺乏错误处理。在以下情况下,它将引发异常:
https://stackoverflow.com/questions/14938977
复制相似问题