using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 排序算法_正式版_整理
{
class Program
{
static void Main(string[] args)
{
Random rd = new Random(10);
int[] array = new int[10000];
for (int i = 0; i < array.Length; i++)
{
array[i] = rd.Next(1, 10000);
}
Console.WriteLine("原数组 排序算法_正式版_整理");
foreach (var i in array)
{
//Console.Write(i + " ");
}
Console.WriteLine("");
var startTime = DateTime.Now;
Sort(array, 0, array.Length - 1);
var delta = (DateTime.Now - startTime).ToString();
Console.WriteLine("最终数组");
foreach (var i in array)
{
//Console.Write(i + " ");
}
Console.WriteLine("");
Check(array);
Console.WriteLine(delta);
Console.ReadKey();
}
static void Check(int[] array)
{
for (int i = 0; i < array.Length - 1; i++)
{
if (array[i] > array[i + 1])
{
Console.WriteLine("算法有问题" + array[i] + " " + array[i + 1]);
return;
}
}
Console.WriteLine("算法正确");
}
static void Sort(int[] array, int start, int end)
{
if (start == end)
{
return;
}
int length = end - start + 1;
int avg = (array[start] + array[start + 1]) / 2;
int avg2 = (array[start] + array[start + 1]);
//int avg2 = (array[start] + array[end]);
int mid = start;
int left = start;
int right = end;
for (; left < right; right--)
{
if (array[right] * 2 < avg2)
{
mid = right;
while (true)
{
if (array[left] * 2 >= avg2 && array[left] > array[right] && left < right)
{
int temp = array[left];
array[left] = array[right];
array[right] = temp;
mid = left;
break;
}
left++;
if (left == right)
{
break;
}
}
}
}
Sort(array, start, mid);
Sort(array, mid + 1, end);
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 排序算法_正式版_整理
{
class Program
{
static void Main(string[] args)
{
Random rd = new Random(10);
int[] array = new int[10000];
for (int i = 0; i < array.Length; i++)
{
array[i] = rd.Next(1, 10000);
}
Console.WriteLine("原数组 排序算法_正式版_整理");
foreach (var i in array)
{
//Console.Write(i + " ");
}
Console.WriteLine("");
var startTime = DateTime.Now;
Sort(array, 0, array.Length - 1);
var delta = (DateTime.Now - startTime).ToString();
Console.WriteLine("最终数组");
foreach (var i in array)
{
//Console.Write(i + " ");
}
Console.WriteLine("");
Check(array);
Console.WriteLine(delta);
Console.ReadKey();
}
static void Check(int[] array)
{
for (int i = 0; i < array.Length - 1; i++)
{
if (array[i] > array[i + 1])
{
Console.WriteLine("算法有问题" + array[i] + " " + array[i + 1]);
return;
}
}
Console.WriteLine("算法正确");
}
static void Sort(int[] array, int start, int end)
{
if (start == end)
{
return;
}
int length = end - start + 1;
int avg = (array[start] + array[start + 1]) / 2;
int avg2 = (array[start] + array[start + 1]);
//int avg2 = (array[start] + array[end]);
int mid = start;
int left = start;
int right = end;
for (; left < right; right--)
{
if (array[right] * 2 < avg2)
{
mid = right;
while (true)
{
if (array[left] * 2 >= avg2 && array[left] > array[right] && left < right)
{
int temp = array[left];
array[left] = array[right];
array[right] = temp;
mid = left;
break;
}
left++;
if (left == right)
{
break;
}
}
}
}
Sort(array, start, mid);
Sort(array, mid + 1, end);
}
}
}

BE









