Advertisement
gride29

Iteracyjny_MergeSort

Nov 17th, 2020
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.65 KB | None | 0 0
  1. using System;
  2.  
  3. namespace Algorytm_MergeSort_Iteracyjny
  4. {
  5.     class Program
  6.     {
  7.         static void mergeSort(char[] arr, int n)
  8.         {
  9.  
  10.             // For current size of subarrays to
  11.             // be merged curr_size varies from
  12.             // 1 to n/2
  13.             int curr_size;
  14.  
  15.             // For picking starting index of
  16.             // left subarray to be merged
  17.             int left_start;
  18.  
  19.  
  20.             // Merge subarrays in bottom up
  21.             // manner. First merge subarrays
  22.             // of size 1 to create sorted
  23.             // subarrays of size 2, then merge
  24.             // subarrays of size 2 to create
  25.             // sorted subarrays of size 4, and
  26.             // so on.
  27.             for (curr_size = 1; curr_size <= n - 1;
  28.                           curr_size = 2 * curr_size)
  29.             {
  30.  
  31.                 // Pick starting point of different
  32.                 // subarrays of current size
  33.                 for (left_start = 0; left_start < n - 1;
  34.                             left_start += 2 * curr_size)
  35.                 {
  36.                     // Find ending point of left
  37.                     // subarray. mid+1 is starting
  38.                     // point of right
  39.                     int mid = left_start + curr_size - 1;
  40.  
  41.                     int right_end = Math.Min(left_start
  42.                                  + 2 * curr_size - 1, n - 1);
  43.  
  44.                     // Merge Subarrays arr[left_start...mid]
  45.                     // & arr[mid+1...right_end]
  46.                     merge(arr, left_start, mid, right_end);
  47.                 }
  48.             }
  49.         }
  50.  
  51.        
  52.         static void merge(char[] arr, int l, int m, int r)
  53.         {
  54.             int i, j, k;
  55.             int n1 = m - l + 1;
  56.             int n2 = r - m;
  57.  
  58.             /* create temp arrays */
  59.             char[] L = new char[n1];
  60.             char[] R = new char[n2];
  61.  
  62.             /* Copy data to temp arrays L[]
  63.             and R[] */
  64.             for (i = 0; i < n1; i++)
  65.                 L[i] = arr[l + i];
  66.             for (j = 0; j < n2; j++)
  67.                 R[j] = arr[m + 1 + j];
  68.  
  69.             /* Merge the temp arrays back into
  70.             arr[l..r]*/
  71.             i = 0;
  72.             j = 0;
  73.             k = l;
  74.             while (i < n1 && j < n2)
  75.             {
  76.                 if (L[i] >= R[j])
  77.                 {
  78.                     arr[k] = L[i];
  79.                     i++;
  80.                 }
  81.                 else
  82.                 {
  83.                     arr[k] = R[j];
  84.                     j++;
  85.                 }
  86.                 k++;
  87.             }
  88.  
  89.             /* Copy the remaining elements of
  90.             L[], if there are any */
  91.             while (i < n1)
  92.             {
  93.                 arr[k] = L[i];
  94.                 i++;
  95.                 k++;
  96.             }
  97.  
  98.             /* Copy the remaining elements of
  99.             R[], if there are any */
  100.             while (j < n2)
  101.             {
  102.                 arr[k] = R[j];
  103.                 j++;
  104.                 k++;
  105.             }
  106.         }
  107.  
  108.         /* Function to print an array */
  109.         static void printArray(char[] A, int size)
  110.         {
  111.             int i;
  112.             for (i = 0; i < size; i++)
  113.                 Console.Write(A[i] + " ");
  114.             Console.WriteLine("");
  115.         }
  116.  
  117.  
  118.         static void Main(string[] args)
  119.         {
  120.             char[] arr = { 'A', 'B', 'C', 'D', 'E', 'F' };
  121.             int n = arr.Length;
  122.  
  123.             Console.Write("Given array is \n");
  124.             printArray(arr, n);
  125.  
  126.             mergeSort(arr, n);
  127.  
  128.             Console.Write("\nSorted array is \n");
  129.             printArray(arr, n);
  130.             Console.ReadKey();
  131.         }
  132.     }
  133. }
  134.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement