25匹马分5组,最少比较多少次 可选出最快的3匹。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace HorseAlg30100215
{
class Program
{
public static Random ra = new Random();
public static int NumOfWinners = 3;
public static int NumOfGroups = 5;
public static int NumInEveryGroups = 5;
public static int[] winners = new int[NumOfWinners];
public static List<Stack> groupList = new List<Stack>();
public static int compareTimes = 0;
static void Main(string[] args)
{
Initialization();
winners = GenerateWinners(NumOfWinners);
Console.WriteLine("The winners are:");
printArray(winners);
//In fact, here comapreTimes-1 means, we dont have to compare at the last time.
Console.WriteLine("Total:"+ (compareTimes-1)+"'s compare.");
Console.ReadLine();
}
static void Initialization()
{
for (int i = 0; i < NumOfGroups; i++)
{
Stack aGroup = new Stack(NumInEveryGroups);
groupList.Add(aGroup);
}
for (int i = 0; i < groupList.Count; i++)
{
InitializeOrderedStack(groupList[i], NumInEveryGroups,i);
}
}
static void printArray(int[] obj)
{
for (int i = 0; i < obj.Length; i++)
{
if (i != obj.Length - 1)
{
Console.Write(obj[i] + ",");
}
else
{
Console.Write(obj[i]);
}
}
Console.WriteLine();
}
static int[] GenerateWinners(int numOfWinners)
{
int[] varWinners = new int[numOfWinners];
for (int i = 0; i < numOfWinners; i++)
{
int[] tempGroupForSorting = new int[NumInEveryGroups];
//1.Retrieve fastest one
for (int j = 0; j < tempGroupForSorting.Length; j++)
{
tempGroupForSorting[j] = (int)groupList[j].Peek();
}
bubbleSort(tempGroupForSorting, true);
int fastestOne = tempGroupForSorting[0];
//2.Pop the fastest one in it's group stack
for (int j = 0; j < groupList.Count; j++)
{
if (fastestOne == (int)groupList[j].Peek())
{
groupList[j].Pop();
}
}
//3.save to winners array
varWinners[i] = fastestOne;
}
return varWinners;
}
static void InitializeOrderedStack(Stack stack, int stackLength,int currentGroupIndex)
{
int[] array = new int[stackLength];
//generate data and print
GenerateData(array);
Console.WriteLine("=============== Group " + (currentGroupIndex+1) + " ===============");
printArray(array);
//sorting and print
bubbleSort(array, false);
Console.WriteLine("=============== After Sorting =================");
printArray(array);
Console.WriteLine("-----------------------------------------------");
//save ordered collection to stack
for (int i = 0; i < array.Length; i++)
{
stack.Push(array[i]);
}
}
static void GenerateData(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
array[i] = ra.Next(100, 400);
}
}
static void bubbleSort(int[] array,bool isAsc)
{
for (int i = 0; i < array.Length; i++)
{
for (int j = array.Length - 1; j > i; j--)
{
if (isAsc == true)
{
if (array[i] < array[j])
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
else
{
if (array[i] > array[j])
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
compareTimes++;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace HorseAlg30100215
{
class Program
{
public static Random ra = new Random();
public static int NumOfWinners = 3;
public static int NumOfGroups = 5;
public static int NumInEveryGroups = 5;
public static int[] winners = new int[NumOfWinners];
public static List<Stack> groupList = new List<Stack>();
public static int compareTimes = 0;
static void Main(string[] args)
{
Initialization();
winners = GenerateWinners(NumOfWinners);
Console.WriteLine("The winners are:");
printArray(winners);
//In fact, here comapreTimes-1 means, we dont have to compare at the last time.
Console.WriteLine("Total:"+ (compareTimes-1)+"'s compare.");
Console.ReadLine();
}
static void Initialization()
{
for (int i = 0; i < NumOfGroups; i++)
{
Stack aGroup = new Stack(NumInEveryGroups);
groupList.Add(aGroup);
}
for (int i = 0; i < groupList.Count; i++)
{
InitializeOrderedStack(groupList[i], NumInEveryGroups,i);
}
}
static void printArray(int[] obj)
{
for (int i = 0; i < obj.Length; i++)
{
if (i != obj.Length - 1)
{
Console.Write(obj[i] + ",");
}
else
{
Console.Write(obj[i]);
}
}
Console.WriteLine();
}
static int[] GenerateWinners(int numOfWinners)
{
int[] varWinners = new int[numOfWinners];
for (int i = 0; i < numOfWinners; i++)
{
int[] tempGroupForSorting = new int[NumInEveryGroups];
//1.Retrieve fastest one
for (int j = 0; j < tempGroupForSorting.Length; j++)
{
tempGroupForSorting[j] = (int)groupList[j].Peek();
}
bubbleSort(tempGroupForSorting, true);
int fastestOne = tempGroupForSorting[0];
//2.Pop the fastest one in it's group stack
for (int j = 0; j < groupList.Count; j++)
{
if (fastestOne == (int)groupList[j].Peek())
{
groupList[j].Pop();
}
}
//3.save to winners array
varWinners[i] = fastestOne;
}
return varWinners;
}
static void InitializeOrderedStack(Stack stack, int stackLength,int currentGroupIndex)
{
int[] array = new int[stackLength];
//generate data and print
GenerateData(array);
Console.WriteLine("=============== Group " + (currentGroupIndex+1) + " ===============");
printArray(array);
//sorting and print
bubbleSort(array, false);
Console.WriteLine("=============== After Sorting =================");
printArray(array);
Console.WriteLine("-----------------------------------------------");
//save ordered collection to stack
for (int i = 0; i < array.Length; i++)
{
stack.Push(array[i]);
}
}
static void GenerateData(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
array[i] = ra.Next(100, 400);
}
}
static void bubbleSort(int[] array,bool isAsc)
{
for (int i = 0; i < array.Length; i++)
{
for (int j = array.Length - 1; j > i; j--)
{
if (isAsc == true)
{
if (array[i] < array[j])
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
else
{
if (array[i] > array[j])
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
compareTimes++;
}
}
}