1

「挿入ソート」を行うプログラムをc#で開発しました。コードは要素の最大値と要素の値を取り、ソートされた値のステップを1つずつ示します。

コード:

    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')を返します。
2番目の呼び出しは32(スペースのASCII値)を返します。
3番目の呼び出しは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 に答える