正如其名,猴子(逗比)排序。简单点来说,这个排序的精髓就是随机打乱数组,检查是否排好序,若是,则输出,否则再次打乱,再检查…最佳情况O(n),平均O(n*n!),最坏可执行直到世界的尽头。
算法基本上就是这样的:
static void Main(string[] args)
{
int[] nums = new[] { 1, 4, 7, 20, 14, 30, 124, 45 };
//计算运行时间
Stopwatch sw = new Stopwatch();
sw.Start();
while (!CheckIsSort(nums))
{
DoSort(nums);
}
sw.Stop();
TimeSpan ts2 = sw.Elapsed;
Console.Write($"Perfect, total speed time :{ts2.TotalSeconds} seconds, right sort:");
PrintNums(nums);
Console.ReadKey(false);
}
static void DoSort(int[] nums)
{
List<int> temp = nums.ToList();
//随机打乱num中的数据
for (int i = 0; i < nums.Length; i++)
{
byte[] buffer = Guid.NewGuid().ToByteArray();
int iSeed = BitConverter.ToInt32(buffer, 0);
Random random = new Random(iSeed);
int index = random.Next(0, temp.Count);
nums[i] = temp[index];
temp.RemoveAt(index);
}
PrintNums(nums);
}
static void PrintNums(int[] nums)
{
for (int i = 0; i < nums.Length; i++)
{
Console.Write(nums[i] + ",");
}
Console.Write("rn");
}
static bool CheckIsSort(int[] nums)
{
for (int i = 0; i < nums.Length; i++)
{
for (int j = i + 1; j < nums.Length; j++)
{
if (nums[i] > nums[j])
{
return false;
}
}
}
return true;
}
执行结果是这样的:
一共测试了三次,8个元素数组排序完成分别是39.1,52.2,19.0秒。总的来说的话,这就是一个逗比排序方法....
文章评论