public void Should_select_fast_on_reverseSortedArray() { var itemsCount = 8000; var items = Enumerable.Range(0, itemsCount).ToArray(); var comparer = new CountedComparer <int>(Comparer <int> .Default); var result = items.QuickSelect(6000, order: QuickselectSortOrder.Descending, comparer: comparer); comparer.Called.Should().BeLessThan(itemsCount * 7); // Avg Performace O(n) AssertQuickSortResult(QuickselectSortOrder.Descending, items, 6000, result); }
public void Should_select_min_and_max_in_N_comparisons(bool min) { var itemsCount = 8000; var items = Enumerable.Range(0, itemsCount).ToArray(); var comparer = new CountedComparer <int>(Comparer <int> .Default); var result = items.QuickSelect(min ? 0 : itemsCount, order: QuickselectSortOrder.Descending, comparer: comparer); comparer.Called.Should().Be(itemsCount); AssertQuickSortResult(QuickselectSortOrder.Descending, items, min ? 0 : itemsCount - 1, result); }
public void Should_select_fast_on_sameData(QuickselectSortOrder order) { var itemsCount = 8000; var items = Enumerable.Repeat(new string('c', 10), itemsCount).ToArray(); var comparer = new CountedComparer <string>(Comparer <string> .Default); var result = items.QuickSelect(6000, order: order, comparer: comparer); comparer.Called.Should().BeLessThan(itemsCount * 7); // Avg Performace O(n) AssertQuickSortResult(order, items, 6000, result); }
public void Should_select_fast_on_similarData(QuickselectSortOrder order) { var itemsCount = 800; var items = new[] { "c", "a", "b", "zf", "e", "f", "w", "we", "z", "gg" } .SelectMany(prefix => Enumerable.Repeat(prefix + new string('c', 10), itemsCount)) .ToArray(); var comparer = new CountedComparer <string>(Comparer <string> .Default); var result = items.QuickSelect(6000, order: order, comparer: comparer); comparer.Called.Should().BeLessThan(items.Length * 7); // Avg Performace O(n) AssertQuickSortResult(order, items, 6000, result); }