Merge sort algorithm

Write a program to demonstrate Merge sort algorithm?

Solution

For more information about Merge sort refer to the article

using System;
using System.Collections.Generic;

namespace MergeSort
{
    class MergeSort
    {
        static void Main()
        {
            var arr = new[] { 8, 6, 4, 2, 9, 5 };
            SortMerge(arr, 0, arr.Length - 1);

            Console.WriteLine($"Sorted:{string.Join(" ", arr)}");
            Console.ReadLine();
        }

        static void MainMerge(IList<int> arr, int left, int mid, int right)
        {
            var end = mid - 1;
            var currentPos = left;
            var temp = new int[arr.Count];
            var rem = right - left + 1;

            while (left <= end && mid <= right)
            {
                temp[currentPos++] = arr[left] <= arr[mid] ? arr[left++] : arr[mid++];
            }

            while (left <= end)
                temp[currentPos++] = arr[left++];

            while (mid <= right)
                temp[currentPos++] = arr[mid++];

            for (var i = 0; i < rem; i++)
            {
                arr[right] = temp[right];
                right--;
            }
        }

        static void SortMerge(IList<int> arr, int left, int right)
        {
            if (right <= left) return;
            var mid = (right + left) / 2;
            SortMerge(arr, left, mid);
            SortMerge(arr, mid + 1, right);
            MainMerge(arr, left, mid + 1, right);
        }


    }
}

Leave a Reply

Your email address will not be published. Required fields are marked *