アルゴリズム マージソート
blog.codebook-10000.com数値を 前半 と 後半に分ける。
更に分割 分割を繰り返して二つの数値毎に比較して分ける
以前行ったクイックソートよりも低速だが安全性が非常に高い。
参考コード
const int NUM = 100;
const
定数に設定
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)の間で処理をするってことだよな。