Example #1
0
 private static void SortArrayOfLength2(ArrayLimit array_limit, int[] test_array)
 {
     if (test_array[array_limit.Bottom] > test_array[array_limit.Top])
     {
         Swap(array_limit.Bottom, array_limit.Top, test_array);
     }
 }
Example #2
0
        static void DoQuickSort(ArrayLimit array_limit, int[] test_array)
        {
            if (array_limit.Size() <= 1)
            {
                return;
            }

            if (array_limit.Size() == 2)
            {
                SortArrayOfLength2(array_limit, test_array);
                return;
            }

            var pivot = choosePivot(array_limit, test_array);

            (var left, var right) = partitionAndReturnleftPivotArrayAndRightPivotArray(array_limit, pivot, test_array);

            DoQuickSort(left, test_array);
            DoQuickSort(right, test_array);
        }
Example #3
0
 public bool TryGetLimit(string type, out ArrayLimit limit)
 {
     return(_lookup.TryGetValue(type, out limit));
 }
Example #4
0
        private static (ArrayLimit left, ArrayLimit right) partitionAndReturnleftPivotArrayAndRightPivotArray(ArrayLimit array_limit, int pivot, int[] array)
        {
            var i = array_limit.Bottom;
            var j = array_limit.Top - 1;

            Swap(pivot, array_limit.Top, array);

            while (j >= i)
            {
                if (array[i] <= array[array_limit.Top])
                {
                    ++i;
                }
                else
                {
                    Swap(i, j, array);
                    --j;
                }
            }

            pivot = Math.Max(i, j);
            Swap(array_limit.Top, pivot, array);

            return(
                new ArrayLimit
            {
                Bottom = array_limit.Bottom,
                Top = pivot - 1
            },
                new ArrayLimit
            {
                Bottom = pivot + 1,
                Top = array_limit.Top
            }
                );
        }
Example #5
0
 private static int choosePivot(ArrayLimit array_limit, int[] test_array) => rnd.Next(array_limit.Bottom, array_limit.Top);