private static void SortingAlgorithms()
        {
            var inputArr = new int[5] {
                2, 3, 1, 5, 6
            };

            #region OrderBy Range Problem using MergeSort
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            SortingProblems sortingProblems = new SortingProblems();
            Console.WriteLine("Given: {0}", inputArr.ToString());

            int i = 1, j = 3;
            sortingProblems.SortSelectedRanges <int[]>(inputArr, i, j);
            Console.WriteLine("Sorted: {0} i:{1}, j:{2}", inputArr.ToString(), i, j);
            stopwatch.Stop();
            Console.WriteLine("RunTime " + stopwatch.ElapsedMilliseconds);
            #endregion
            #region Merge sorting
            MergeSorting ms = new MergeSorting();

            Console.WriteLine("Input Arrays:");
            inputArr.All(a => { Console.Write("{0} ", a); return(true); });
            Console.WriteLine();
            Console.WriteLine("Sorted Arrays:");
            foreach (var item in ms.Run <int[]>(inputArr))
            {
                Console.Write("{0} ", item);
            }
            #endregion
        }
        public void PassingSortingByRange()
        {
            #region prepare random data
            int       n        = 1000;
            Random    r        = new Random();
            var       inputArr = new int[n];
            const int min      = -10;
            const int max      = 10000;
            for (int z = 0; z < n; z++)
            {
                inputArr[z] = r.Next(min, max);
            }
            int i = r.Next(10, 400), j = r.Next(400, 800);
            #endregion
            Stopwatch stopwatch             = new Stopwatch();
            stopwatch.Start();
            SortingProblems sortingProblems = new SortingProblems();
            Debug.WriteLine("Given: " + String.Join(",", inputArr));


            var result                      = sortingProblems.SortSelectedRanges <int[]>(inputArr, i, j);
            Debug.WriteLine("Sorted: {0} i:{1}, j:{2}", String.Join(",", result), i, j);
            stopwatch.Stop();
            Assert.IsTrue(inputArr.Length == result.Length);
            Debug.WriteLine("RunTime " + stopwatch.ElapsedMilliseconds);
        }