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]+" "); } Console.WriteLine(); } static void Rsot(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,1,12}; for (int i = 0; i < 10; i++) { numQueue[i] = new Queue(); } DisplayArray(nums); Rsot(numQueue,nums,DigitType.ones); BuildArray(numQueue,nums); DisplayArray(nums); Rsot(numQueue,nums,DigitType.tens); BuildArray(numQueue,nums); DisplayArray(nums); Console.ReadLine(); } }
优先队列
public struct ProcessStruct { public int priority; public string name; } public class PQueue : Queue { public PQueue() { } public override object Dequeue() { object[] items; int min; items = this.ToArray(); min = ((ProcessStruct)items[0]).priority; for (int i = 1; i <=items.GetUpperBound(0); i++) { if (((ProcessStruct)items[i]).priority<min) { min = ((ProcessStruct)items[i]).priority; } } this.Clear(); for (int i = 0; i <=items.GetUpperBound(0); i++) { if (((ProcessStruct)items[i]).priority == min && ((ProcessStruct)items[i]).name!="") { this.Enqueue(items[i]); } } return base.Dequeue(); } } class Program { static void Main(string[] args) { PQueue ewait = new PQueue(); ProcessStruct[] ps=new ProcessStruct[4]; ps[0].name = "aaa"; ps[0].priority = 1; ps[1].name = "bbb"; ps[1].priority = 1; ps[2].name = "ccc"; ps[2].priority =2; ps[3].name = "DDD"; ps[3].priority = 3; for (int i = 0; i < ps.Length; i++) { ewait.Enqueue(ps[i]); } Console.WriteLine(""+((ProcessStruct)ewait.Dequeue()).name); Console.ReadLine(); } }