public void MergeAndCountInversionsWorksWellOnPartialRight() { var solver = new FindArrayInversionsCount(); var sortedArray = new int[4]; Assert.AreEqual(0ul, solver.MergeAndCountInversions( new[] { 1, 2, 3, 4 }, 0, 3, 3, 1, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 2, 3, 4 }, sortedArray); Assert.AreEqual(1ul, solver.MergeAndCountInversions( new[] { 1, 2, 20, 8 }, 0, 3, 3, 1, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 2, 8, 20 }, sortedArray); sortedArray = new int[5]; Assert.AreEqual(4ul, solver.MergeAndCountInversions( new[] { 1, 19, 20, 8, 9 }, 0, 3, 3, 2, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 8, 9, 19, 20 }, sortedArray); }
public void CanFindInversionsForLargeRandom() { var solver = new FindArrayInversionsCount(); var array = Enumerable.Range(0, 1000).ToArray(); array.Shuffle(); Assert.AreEqual(solver.CalcInversionsCountBrute(array), solver.CalcInversionsCount(array)); }
public void CanFindInversionsCount() { var solver = new FindArrayInversionsCount(); Assert.AreEqual(1ul, solver.CalcInversionsCount(new[] { 6, 5 })); Assert.AreEqual(3ul, solver.CalcInversionsCount(new[] { 6, 5, 4 })); Assert.AreEqual(6ul, solver.CalcInversionsCount(new[] { 6, 5, 4, 3 })); Assert.AreEqual(15ul, solver.CalcInversionsCount(new[] { 6, 5, 4, 3, 2, 1 })); Assert.AreEqual(6ul, solver.CalcInversionsCount(new[] { 1, 2, 6, 5, 4, 3 })); Assert.AreEqual(6ul, solver.CalcInversionsCount(new[] { 1, 2, 6, 0, 5, 4, 18 })); Assert.AreEqual(66ul, solver.CalcInversionsCount(new[] { 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 })); }
public void MergeAndCountInversionsWorksWellTrivial() { var solver = new FindArrayInversionsCount(); var sortedArray = new int[2]; Assert.AreEqual(0ul, solver.MergeAndCountInversions( new[] { 1, 2 }, 0, 1, 1, 1, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 2 }, sortedArray); Assert.AreEqual(1ul, solver.MergeAndCountInversions( new[] { 2, 1 }, 0, 1, 1, 1, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 2 }, sortedArray); }
public void CanFindInversionsForRandom() { var solver = new FindArrayInversionsCount(); for (var size = 2; size < 100; size++) { var array = Enumerable.Range(1, size).ToArray(); array.Shuffle(); Console.WriteLine(size); var expected = solver.CalcInversionsCountBrute(array); var actual = solver.CalcInversionsCount(array.ToArray()); if (expected != actual) { Console.WriteLine(", ".Join(array)); } Assert.AreEqual(expected, actual); } }
public void MergeAndCountInversionsWorksWell6() { var solver = new FindArrayInversionsCount(); var sortedArray = new int[6]; Assert.AreEqual(0ul, solver.MergeAndCountInversions( new[] { 1, 2, 3, 4, 5, 6 }, 0, 3, 3, 3, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 2, 3, 4, 5, 6 }, sortedArray); Assert.AreEqual(3ul, solver.MergeAndCountInversions( new[] { 1, 2, 20, 8, 9, 10 }, 0, 3, 3, 3, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 2, 8, 9, 10, 20 }, sortedArray); Assert.AreEqual(6ul, solver.MergeAndCountInversions( new[] { 1, 19, 20, 8, 9, 10 }, 0, 3, 3, 3, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 8, 9, 10, 19, 20 }, sortedArray); Assert.AreEqual(5ul, solver.MergeAndCountInversions( new[] { 1, 15, 20, 8, 9, 17 }, 0, 3, 3, 3, sortedArray, 0)); AssertHelper.Seq(new[] { 1, 8, 9, 15, 17, 20 }, sortedArray); }