再起関数でソート

データを入力(0で終了): 5
データを入力(0で終了): 3
データを入力(0で終了): 6
データを入力(0で終了): 2
データを入力(0で終了): 7
データを入力(0で終了): 1
データを入力(0で終了): 0
    1    2    3    5    6    7

C# で最大20件分のデータ領域(配列)を定義して、再起関数でソートします。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. 最大20件分のデータを隣接交換法を使って、再起メソッドでソートします。
    /******************************************/
    /*★ 隣接交換法で再起ソート     前田 稔 ★*/
    /******************************************/
    using System;
    
    class Prog
    {
        public static void Main()
        {
            int[]   t = new int[20];
            int     n;
            string  str;
            int     i;
            for (n = 0; n < 20; n++)
            {
                Console.Write("データを入力(0で終了): ");
                str = Console.ReadLine();
                t[n] = int.Parse(str);
                if (t[n] == 0) break;
            }
            Sort(t, n);
            for(i=0; i<n; i++)  Console.Write("{0, 5}", t[i]);
            Console.ReadLine();
        }
    
        // max() を使って再起でソート
        static void Sort(int[] t, int n)
        {
            if (n>1)
            {   Max(t,n);
                Sort(t,n-1);
            }
        }
    
        // t[n] の最大の値を一番後(t[n-1]) に格納する
        static void Max(int[] t, int n)
        {   int     w;
    
            if (n<2)    return;
            Max(t,n-1);
            if (t[n-2]>t[n-1])
            {   w= t[n-2];
                t[n-2]= t[n-1];
                t[n-1]= w;
            }
        }
    }
    
  2. 配列 new int[20] で最大20件分の領域を定義します。
    int[] t = new int[20];
  3. コンソールから最大20件のデータを t[20] に入力します。
    データの終わりの印としてゼロが入力されます。
  4. Sort(t, n); が再起でソートを行う関数です。
    Sort 関数は Max 関数の助けを借りてをソートします。
    Sort 関数の中から Sort 関数を呼び出していることに注目して下さい。
  5. Max 関数は n 個の中の一番大きい値が配列の最後(t[n-1])に来るように入れ替える関数です。
    Max 関数の中からも Max 関数を呼び出していることに注目して下さい。
    Max 関数では n<2 になるまで Max 関数を呼び続けます。
    n<2 になると return; で1レベル戻るのですが、ここからが Max 関数の本領発揮です。 (^_^;)

【演習】

  1. Max 関数の実行の流れを理解して下さい。
  2. Sort 関数の実行の流れを理解して下さい。

超初心者のプログラム入門(C# Frame Work)