'Strategy Design Pattern implementation, am I doing it right?

My assignment requires me to implement different Sorting Algorithms using the Strategy Pattern, a Gang of Four Design Pattern.

I'll be graded on the correctness of my Strategy Design Pattern implementation. So I did my research and from my understanding, learned that Strategy Design uses interface or abstract for different strategies. So here is what I did:

Interface:

    public interface ISortStrategy
{
    string Sort(string input);
}

Program:

    class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Enter Sort Strategy (bubblesort, quicksort, mergesort). Defaults to bubblesort");
        ISortStrategy strategy = default;

        var input = Console.ReadLine();
        input = input.ToLower();

        switch (input)
        {
            case "bubblesort":
                strategy = new BubbleSort();
                break;
            case "quicksort":
                strategy = new QuickSort();
                break;
            case "mergesort":
                strategy = new MergeSort();
                break;
            default:
                strategy = new BubbleSort();
                break;
        }

        Console.WriteLine("Enter String to Sort");
        var value = Console.ReadLine();

        Console.Write("The sorted string is: " + strategy.Sort(value));

        Console.ReadKey();
    }
}

Sample MergeSort strategy:

        public string Sort(string input)
    {
        var result = "";

        int size = (input.Length % 2 == 0) ? input.Length / 2 : (input.Length + 1) / 2;

        if (input.Length > 1)
        {
            char[] left = input.Substring(0, input.Length / 2).ToCharArray();
            char[] right = input.Substring(input.Length / 2,input.Length - (input.Length / 2)).ToCharArray();

            // recursively sort the two halves
            Sort(left.Length.ToString());
            Sort(right.Length.ToString());

            // merge the sorted left and right subLists together
            result = merge(input, left, right);
        }

        return result;
    }

    public string merge(string result, char[] left, char[] right)
    {
        int i1 = 0; // index for left
        int i2 = 0; // index for right

        var theString = result;
        var aStringBuilder = new StringBuilder(theString);

        for (int i = 0; i < aStringBuilder.Length; i++)
        {
            if (i2 >= right.Length || (i1 < left.Length && left.GetValue(i1).ToString().CompareTo(right.GetValue(i2).ToString()) < 0))
            {
                aStringBuilder.Remove(i, 1);
                aStringBuilder.Insert(i, left.GetValue(i1).ToString());
                i1++;
            }
            else
            {
                aStringBuilder.Remove(i, 1);
                aStringBuilder.Insert(i, right.GetValue(i2).ToString());
                i2++;
            }
        }

        theString = aStringBuilder.ToString();
        return theString;

    }
}

The question is, I am doing this right? or how will I do it right?

Like my interface and BubbleSort only has method Sort(string input); but my MergeSort has another method merge(string result, char[] left, char[] right) is this ok under Strategy Design? Thank you for the response and advice!



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source