アルゴリズム マージソート

blog.codebook-10000.com数値を 前半 と 後半に分ける。

更に分割 分割を繰り返して二つの数値毎に比較して分ける

 

以前行ったクイックソートよりも低速だが安全性が非常に高い。

 

ソートと探索(マージソート)

 

参考コード

blog.livedoor.jp

 

        const int NUM = 100;

 

const

定数に設定

 

ufcpp.net

 

        const int NUM = 100;

        static void Main(string args)
        {
    
        Random random = new Random();
        int
nums = new int[NUM];

 

nums

はint 配列100個

 

この考え方は色々応用が効きそうだなー。

 

これだと配列番号が 100までになるのかな

 

        for (int i = 0; i < NUM; i++)
    {
        nums[i] = random.Next(NUM);
    }
    Console.WriteLine();
    Console.WriteLine("*****{0}個の乱数生成*****",NUM);
    Console.WriteLine();

 

配列を100個設定して、Randomの上限に設定。

 

 

            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write("{0,4}", nums[i]);
                if (i % 10 == 9) Console.WriteLine();
            }
            Console.WriteLine();
            Console.WriteLine("*****マージソート実行*****", NUM);
            Console.WriteLine();

 

 

 

 

 

分析

    class Program
    {
        static void Main(string args)


        {
            const int NUM = 100;
            int
nums = new int[NUM];
            for (int i = 0; i < nums.Length; i++)
            {
                Console.Write("{0,4}", nums[i]);
                if (i % 10 == 9) Console.WriteLine();
            }

            Console.WriteLine();
            Console.WriteLine("*****マージソート実行*****", NUM);
            Console.WriteLine();
        }
    }

コードこれだけだと、表示だけになるみたい。

 

自分で組めるようになるには遠いのかなー

 

 

 

        static void swap<T>(T a, T b)
        {
            T c = a;
            a = b;
            b = c;
        
        }

 

お馴染みのリストさん

using System.Collections.Generic;

この機能は使ってみないとわからないなー。

 

実際に組んでみたほうがイイのが

List

using System.Collections.Generic;

 

配列

 

                int mid = (left + right) / 2;
                mergeSort( a, left, mid);
                mergeSort(a, mid + 1, right);

 

これどういうことなんだろう?

 

 

                while (i <= right && j < p)
                {
                    a[k++] = (temp[j] <= a[i]) ? temp[j++] : a[i++];
                }

                while (j < p)
                {

                    a[k++] = temp[j++];
                }

 

この辺も処理がまだ理解できないなー

 

whileはまl

(j < p)の間で処理をするってことだよな。