document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Microsoft.VisualStudio.TestTools.UnitTesting;
  5.  
  6. namespace CodingInterview
  7. {
  8.     [TestClass]
  9.     public class SortStack
  10.     {
  11.         public static Stack<int> SortStack(Stack<int> stackToSort)
  12.         {
  13.             var buffer = new Stack<int>(stackToSort.Count);
  14.  
  15.             while (stackToSort.Count != 0)
  16.             {
  17.                 for (int i = 0; i < stackToSort.Count; i++)
  18.                 {
  19.                     var currentItem = stackToSort.Pop();
  20.                     if (buffer.Count == 0 || currentItem >= buffer.Peek())
  21.                     {
  22.                         buffer.Push(currentItem);
  23.                     }
  24.                     else
  25.                     {
  26.                         while (buffer.Count > 0)
  27.                         {
  28.                             stackToSort.Push(buffer.Pop());
  29.                         }
  30.  
  31.                         stackToSort.Push(currentItem);
  32.                     }
  33.                 }
  34.             }
  35.  
  36.             return buffer;
  37.         }
  38.  
  39.         [TestMethod]
  40.         public void SortStackTest()
  41.         {
  42.             var stack = new Stack<int>();
  43.             var sequence = new[] {5, 12, 11, 3, 10, 20, 500, -9, 55, 1, -1, -1, 22, -1 };
  44.             foreach (var i in sequence)
  45.             {
  46.                 stack.Push(i);
  47.             }
  48.  
  49.             var result = SortStack(stack);
  50.             Assert.IsNotNull(result);
  51.  
  52.             Array.Sort(sequence);
  53.  
  54.             var reversed = sequence.Reverse();
  55.             foreach (var i in reversed)
  56.             {
  57.                 Assert.AreEqual(i, result.Pop());
  58.             }
  59.         }
  60.     }
  61. }
');