Advertisement
Guest User

MergeSort

a guest
Jun 27th, 2019
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.27 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace P05MergeSort2
  5. {
  6.     class Program
  7.     {
  8.         static void Main(string[] args)
  9.         {
  10.             int[] input = Console.ReadLine()
  11.                 .Split()
  12.                 .Select(int.Parse)
  13.                 .ToArray();
  14.  
  15.             Mergesort<int>.Sort(input);
  16.  
  17.             Console.WriteLine(string.Join(" ", input));
  18.         }
  19.  
  20.         public class Mergesort<T> where T : IComparable
  21.         {
  22.             private static T[] aux;
  23.             public static void Sort(T[] arr)
  24.             {
  25.                 aux = new T[arr.Length];
  26.                 Sort(arr, 0, arr.Length - 1);
  27.             }
  28.  
  29.             private static void Sort(T[] arr, int lo, int hi)
  30.             {
  31.                 if (lo >= hi)
  32.                 {
  33.                     return;
  34.                 }
  35.                 int mid = lo + (hi - lo) / 2;
  36.                 Sort(arr, lo, mid);
  37.                 Sort(arr, mid + 1, hi);
  38.                 Merge(arr, lo, mid, hi);
  39.             }
  40.  
  41.             private static void Merge(T[] arr, int lo, int mid, int hi)
  42.             {
  43.                 if (IsLess(arr[mid], arr[mid + 1]))
  44.                 {
  45.                     return;
  46.                 }
  47.  
  48.                 for (int index = lo; index < hi + 1; index++)
  49.                 {
  50.                     aux[index] = arr[index];
  51.                 }
  52.  
  53.                 int i = lo;
  54.                 int j = mid + 1;
  55.                 for (int k = lo; k <= hi; k++)
  56.                 {
  57.                     if (k > mid)
  58.                     {
  59.                         arr[k] = aux[j++];
  60.                     }
  61.                     else if (j > hi)
  62.                     {
  63.                         arr[k] = aux[i++];
  64.                     }
  65.                     else if (IsLess(aux[i], aux[j]))
  66.                     {
  67.                         arr[k] = aux[i++];
  68.                     }
  69.                     else
  70.                     {
  71.                         arr[k] = aux[j++];
  72.                     }
  73.                 }
  74.             }
  75.  
  76.             private static bool IsLess(T item1, T item2)
  77.             {
  78.                 if (item1.CompareTo(item2) == -1)
  79.                 {
  80.                     return true;
  81.                 }
  82.                 return false;
  83.             }
  84.         }
  85.     }
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement