using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace dgpx
{
class Program
{
static void Main(string[] args)
{
int length = 50000000;
int[] array = new int[length];
int[] array2 = array;
Random random = new Random();
for (int i = 0; i < length; i++)
{
array[i] = random.Next(2000);
}
DateTime dt1 = DateTime.Now;
Console.WriteLine(dt1.Hour + ":" + dt1.Minute + ":" + dt1.Second + "." + dt1.Millisecond);
array = sortdg(array);
DateTime dt2 = DateTime.Now;
Console.WriteLine(dt2.Hour + ":" + dt2.Minute + ":" + dt2.Second + "." + dt2.Millisecond);
dt1 = DateTime.Now;
Console.WriteLine(dt1.Hour + ":" + dt1.Minute + ":" + dt1.Second + "." + dt1.Millisecond);
array = sortxz(array2);
dt2 = DateTime.Now;
Console.WriteLine(dt2.Hour + ":" + dt2.Minute + ":" + dt2.Second + "." + dt2.Millisecond);
Console.Read();
}
#region
#endregion
#region 插入排序
public static int[] sortxz(int[] a)
{
for (int w = 1; w < a.Length; w++)
{
int value = a[w];
int j = w;
while (j > 0 && a[j - 1] > value)
{
a[j] = a[j - 1];
--j;
}
a[j] = value;
}
return a;
}
#endregion
#region 递归排序
public static int[] sortdg(int[] array)
{
int length = array.Length;
if (length == 1)
{
return array;
}
int l1 = length / 2;
int l2 = length - l1;
int[] a1 = new int[l1];
for (int i = 0; i < l1; i++)
{
a1[i] = array[i];
}
int[] a2 = new int[l2];
for (int i = 0; i < l2; i++)
{
a2[i] = array[i + l1];
}
a1 = sortdg(a1);
a2 = sortdg(a2);
return px(a1, a2);
}
public static int[] px(int[] a1,int[] a2)
{
int l1 = a1.Length;
int l2 = a2.Length;
int[] array = new int[l1 + l2];
int a1number = 0;
int a2number = 0;
int a3number = 0;
while (a1number < l1 && a2number < l2)
{
if (a1[a1number] < a2[a2number])
array[a3number++] = a1[a1number++];
else
array[a3number++] = a2[a2number++];
}
while (a1number < l1)
{
array[a3number++] = a1[a1number++];
}
while (a2number < l2)
{
array[a3number++] = a2[a2number++];
}
return array;
}
#endregion
}
}