Advertisement
Guest User

Untitled

a guest
Sep 27th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.88 KB | None | 0 0
  1.  
  2.  
  3. internal class Binary : Search {
  4.         public Binary(int length, bool sorted) : base(length, sorted) {}
  5.  
  6.  
  7.         /// <summary>
  8.         ///     First checks if collection is sorted, if not it will throw an exception.
  9.         ///     Then it perform a for loop up till repeats arg.
  10.         ///     Each iteration in the for loop will perform a binary search.
  11.         /// </summary>
  12.         /// <param name="repeats"></param>
  13.         /// <returns>The elapsed time for all attempts</returns>
  14.         public override TimeSpan Sort(int repeats) {
  15.             // Checks that the collection is ordered.
  16.             if (!Ints.Zip(Ints.Skip(1), (a, b) => new {a, b}).All(p => p.a < p.b))
  17.                 throw new Exception("Collection must be sorted");
  18.             var startNew = Stopwatch.StartNew();
  19.             for (var i = 0; i < repeats; i++) {
  20.                 var lo = 0;
  21.                 var hi = Ints.Length - 1;
  22.                 var key = Random.Next(Ints.Length);
  23.                 while (lo <= hi) {
  24.                     var mid = lo + (hi - lo)/2;
  25.                     if (key < Ints[mid]) hi = mid - 1;
  26.                     else if (key > Ints[mid]) lo = mid + 1;
  27.                     else break;
  28.                 }
  29.             }
  30.             return startNew.Elapsed;
  31.         }
  32.     }
  33.   internal abstract class Search {
  34.         protected Search(int length, bool sorted) {
  35.             Ints = sorted ? Enumerable.Range(0, length).ToArray() : Enumerable.Range(0, length).Select(i => 2).ToArray();
  36.         }
  37.  
  38.         private const int Seed = 5;
  39.         protected Random Random { get; } = new Random(Seed);
  40.         protected int[] Ints { get; }
  41.         public abstract TimeSpan Sort(int repeats);
  42.  
  43.         public TimeSpan BubbleSort() {
  44.             var next = 0;
  45.             var startNew = Stopwatch.StartNew();
  46.             for (var i = 0; i < Ints.Length; i++) {
  47.                 for (var j = 0; j < Ints.Length; j++) {
  48.                     var current = Ints[j];
  49.                     if (j != Ints.Length)
  50.                         next = Ints[j];
  51.                     if (current <= next) continue;
  52.                     Ints[current] = next;
  53.                     Ints[next] = current;
  54.                 }
  55.             }
  56.  
  57.             startNew.Stop();
  58.             return startNew.Elapsed;
  59.         }
  60.     }
  61.  
  62. internal class Linear : Search {
  63.         public override TimeSpan Sort(int repeats) {
  64.             var startNew = Stopwatch.StartNew();
  65.             for (var i = 0; i < repeats; i++) {
  66.                 var next = Random.Next(Ints.Length);
  67.                 foreach (var number in Ints) {
  68.                     if (number == next) {
  69.                         startNew.Stop();
  70.                         break;
  71.                     }
  72.                 }
  73.             }
  74.             return startNew.Elapsed;
  75.         }
  76.  
  77.         public Linear(int length, bool sorted) : base(length, sorted) {}
  78.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement