Merge sort is based on the divide-and-conquer paradigm. We break down an array into two sub arrays. This code sample explains how a merge sort algorithm works and how it is implemented in C#.

Algorithm: Merge Sort

To sort the entire sequence A[1 .. n], make the initial call to the procedure MERGE-SORT (A, 1, n).

MERGE-SORT (A, p, r)

1. IF p < r // Check for base case
2. THEN q = FLOOR[(p + r)/2] // Divide step
3. MERGE (A, p, q) // Conquer step.
4. MERGE (A, q + 1, r) // Conquer step.
5. MERGE (A, p, q, r) // Conquer step.
Here is the code written in C#.

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace MergeSort
  6. {
  7. class MergeSort
  8. {
  9. static public void MainMerge(int[] numbers, int left, int mid, int right)
  10. {
  11. int[] temp = new int[25];
  12. int i, eol, num, pos;
  13. eol = (mid - 1);
  14. pos = left;
  15. num = (right - left + 1);
  16. while ((left <= eol) && (mid <= right))
  17. {
  18. if (numbers[left] <= numbers[mid])
  19. temp[pos++] = numbers[left++];
  20. else
  21. temp[pos++] = numbers[mid++];
  22. }
  23. while (left <= eol)
  24. temp[pos++] = numbers[left++];
  25. while (mid <= right)
  26. temp[pos++] = numbers[mid++];
  27. for (i = 0; i < num; i++)
  28. {
  29. numbers[right] = temp[right];
  30. right--;
  31. }
  32. }
  33. static public void SortMerge(int[] numbers, int left, int right)
  34. {
  35. int mid;
  36. if (right > left)
  37. {
  38. mid = (right + left) / 2;
  39. SortMerge(numbers, left, mid);
  40. SortMerge(numbers, (mid + 1), right);
  41. MainMerge(numbers, left, (mid + 1), right);
  42. }
  43. }
  44. static void Main(string[] args)
  45. {
  46. Console.Write("\nProgram for sorting a numeric array using Merge Sorting");
  47. Console.Write("\n\nEnter number of elements: ");
  48. int max = Convert.ToInt32(Console.ReadLine());
  49. int[] numbers = new int[max];
  50. for (int i = 0; i < max; i++)
  51. {
  52. Console.Write("\nEnter [" + (i + 1).ToString() + "] element: ");
  53. numbers[i] = Convert.ToInt32(Console.ReadLine());
  54. }
  55. Console.Write("Input int array : ");
  56. Console.Write("\n");
  57. for (int k = 0; k < max; k++)
  58. {
  59. Console.Write(numbers[k] + " ");
  60. Console.Write("\n");
  61. }
  62. Console.WriteLine("MergeSort By Recursive Method");
  63. SortMerge(numbers, 0, max - 1);
  64. for (int i = 0; i < max; i++)
  65. Console.WriteLine(numbers[i]);
  66. Console.ReadLine();
  67. }
  68. }
  69. }
The output looks like the following: