Advertisement
Filkolev

Merge Sort

Sep 29th, 2015
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.54 KB | None | 0 0
  1. namespace MergeSort
  2. {
  3.     using System;
  4.  
  5.     public class MergeSortArray
  6.     {
  7.         public static void Main(string[] args)
  8.         {
  9.             int[] array = { 5, 9, 2, 3, 6 };
  10.  
  11.             MergeSort(array, 0, array.Length - 1);
  12.  
  13.             Console.WriteLine("Sorted (Merge Sort):");
  14.             Console.WriteLine("[{0}]", string.Join(", ", array));
  15.         }
  16.  
  17.         private static void MergeSort(int[] array, int start, int end)
  18.         {
  19.             if (start < end)
  20.             {
  21.                 int middle = (end + start) / 2;
  22.  
  23.                 MergeSort(array, start, middle);
  24.                 MergeSort(array, middle + 1, end);
  25.  
  26.                 MergeArray(array, start, middle, end);
  27.             }
  28.         }
  29.  
  30.         private static void MergeArray(int[] array, int start, int middle, int end)
  31.         {
  32.             /* Create a temporary array for storing the merged array (Length of temp will be
  33.              * the sum of the sizes of both arrays to be merged) */
  34.             int[] temp = new int[end - start + 1];
  35.  
  36.             int leftHead = start;
  37.             int rightHead = middle + 1;
  38.             int tempIndex = 0;
  39.  
  40.             // Traverse both arrays simultaneously and store the smallest element of both to temp
  41.             while (leftHead <= middle && rightHead <= end)
  42.             {
  43.                 if (array[leftHead] < array[rightHead])
  44.                 {
  45.                     temp[tempIndex] = array[leftHead];
  46.                     leftHead++;
  47.                 }
  48.                 else
  49.                 {
  50.                     temp[tempIndex] = array[rightHead];
  51.                     rightHead++;
  52.                 }
  53.  
  54.                 tempIndex++;
  55.             }
  56.  
  57.             // If any elements remain in the left array add them to temp
  58.             while (leftHead <= middle)
  59.             {
  60.                 temp[tempIndex] = array[leftHead];
  61.                 tempIndex++;
  62.                 leftHead++;
  63.             }
  64.  
  65.             // If any elements remain in the right array add them to temp
  66.             while (rightHead <= end)
  67.             {
  68.                 temp[tempIndex] = array[rightHead];
  69.                 tempIndex++;
  70.                 rightHead++;
  71.             }
  72.  
  73.             // Copy all elements from temp to the original array
  74.             tempIndex = 0;
  75.             leftHead = start;
  76.  
  77.             while (tempIndex < temp.Length && leftHead <= end)
  78.             {
  79.                 array[leftHead] = temp[tempIndex];
  80.                 leftHead++;
  81.                 tempIndex++;
  82.             }
  83.         }
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement