Sunday, September 28, 2008

Sort data with Queue(c#)

The Queue is FIFO(first in, first out), this is different from ArrayList. now let's check out how to sort data with queue.
ok, let's go!


using System.Collections;//
namespace SortDataWithQueues
{
class Program
{
enum Digittype {ones = 1,tens = 10 };
static void DisplayArray(int[] n)
{
for (int i = 0; i <= n.GetUpperBound(0); i++)
{
Console.Write(n[i]+" ");
}
}
static void RSort(Queue[] que, int[] n, Digittype digit)
{
int snum;
for (int i = 0; i <= n.GetUpperBound(0); i++)
{
if (digit == Digittype.ones)
{
snum = n[i] % 10;
}
else
{
snum = n[i] / 10;
}
que[snum].Enqueue(n[i]);
}
}
static void BuildArray(Queue[] que,int[] n)
{
int y = 0;
for (int i = 0; i <= 9; i++)
{
while (que[i].Count > 0)
{
n[y] = Int32.Parse(que[i].Dequeue().ToString());
y++;
}
}
}
static void Main(string[] args)
{
Queue[] numQueue = new Queue[10];
int[] nums = new int[] {91,46,85,15,92,35,31,22 };
int[] random = new Int32[99];
//display original list
for (int i = 0; i < 10; i++)
{
numQueue[i] = new Queue();
}
RSort(numQueue,nums,Digittype.ones);
BuildArray(numQueue,nums);
Console.WriteLine();
Console.WriteLine("first pass results: ");
DisplayArray(nums);
//second pass sort
RSort(numQueue,nums,Digittype.tens);
BuildArray(numQueue,nums);
Console.WriteLine();
Console.WriteLine("second pass results: ");
//display final results
DisplayArray(nums);
Console.WriteLine();
}
}
}

No comments: