//Part 1 : CountInversion() *Split* public static int CountInversion(List <int> numbers) { //base case if (numbers.Count == 1) { return(0); } //creat int midle , list left and right . var mid = numbers.Count / 2; var left = new List <int> (); var right = new List <int> (); //left is input list until midle and right is numbers after midle . left = SplitLeft(numbers, left, mid); right = SplitRight(numbers, right, mid); //Initialize int counter that equle CountInversion(left) + CountInversion(right). var counter = CountInversion(left) + CountInversion(right); //sort left and right . left = MergeSorter.MergeSort(left.ToArray()).ToList(); right = MergeSorter.MergeSort(right.ToArray()).ToList(); // return count(left , right , counter). return(Count(left, right, counter)); }
public static List <int> RandomSortedList() { var numbers = new List <int> (); var x = new Random().Next(4, 10); for (int i = 0; i <= x; i++) { numbers.Add(new Random().Next(0, 100)); } return(MergeSorter.MergeSort(numbers.ToArray()).ToList()); }
//********************************************** // Test Q9 merge sort //*********************************************** public static bool TestMergeSoet() { var x = RandomIntArray(); x = MergeSorter.MergeSort(x); for (int i = x.Length - 1; i > 0; i--) { if (x[i] < x[i - 1]) { return(false); } } return(true); }
public static bool TestInversionsTwo() { var numbers = RandomIntArray().ToList(); numbers = MergeSorter.MergeSort(numbers.ToArray()).ToList(); var x = new Random().Next(1, 5); var y = new Random().Next(6, 10); var counter = 0; if (counter == Inversions.NumberOfInversions(numbers)) { return(true); } else { return(false); } }
//**************************************************************** //Test Q10 Inversions //**************************************************************** public static bool TestInversions() { var numbers = RandomIntArray().ToList(); numbers = MergeSorter.MergeSort(numbers.ToArray()).ToList(); var i = new Random().Next(1, 20); var x = numbers[0]; numbers[i] = numbers[0]; numbers[0] = x; if (Inversions.NumberOfInversions(numbers) == i - 1) { return(true); } else { return(false); } }