slik1977

Task4_MergeSort+Benchmark

Feb 24th, 2022 (edited)
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.20 KB | None | 0 0
  1. using System;
  2. using BenchmarkDotNet.Attributes;
  3.  
  4. namespace Task4C
  5. {
  6.     [MemoryDiagnoser]
  7.     public class MergedSort
  8.     {
  9.         private int[] _numbers;
  10.  
  11.         private void Merge(int[] array, int lowIndex, int middleIndex, int highIndex)
  12.         {
  13.             var left = lowIndex;
  14.             var right = middleIndex + 1;
  15.             var tempArray = new int[highIndex - lowIndex + 1];
  16.             var index = 0;
  17.  
  18.             while ((left <= middleIndex) && (right <= highIndex))
  19.             {
  20.                 if (array[left] < array[right])
  21.                 {
  22.                     tempArray[index] = array[left];
  23.                     left++;
  24.                 }
  25.                 else
  26.                 {
  27.                     tempArray[index] = array[right];
  28.                     right++;
  29.                 }
  30.  
  31.                 index++;
  32.             }
  33.  
  34.             for (var i = left; i <= middleIndex; i++)
  35.             {
  36.                 tempArray[index] = array[i];
  37.                 index++;
  38.             }
  39.  
  40.             for (var i = right; i <= highIndex; i++)
  41.             {
  42.                 tempArray[index] = array[i];
  43.                 index++;
  44.             }
  45.  
  46.             for (var i = 0; i < tempArray.Length; i++)
  47.             {
  48.                 array[lowIndex + i] = tempArray[i];
  49.             }
  50.         }
  51.        
  52.         private int[] MergeSort(int[] array, int lowIndex, int highIndex)
  53.         {
  54.             if (lowIndex < highIndex)
  55.             {
  56.                 var middleIndex = (lowIndex + highIndex) / 2;
  57.                 MergeSort(array, lowIndex, middleIndex);
  58.                 MergeSort(array, middleIndex + 1, highIndex);
  59.                 Merge(array, lowIndex, middleIndex, highIndex);
  60.             }
  61.  
  62.             return array;
  63.         }
  64.  
  65.         [Benchmark]
  66.         public void MergeSort()
  67.         {
  68.             MergeSort(_numbers, 0, _numbers.Length - 1);
  69.         }
  70.        
  71.         [IterationSetup]
  72.         public void MakeArray()
  73.         {
  74.             var number = new Random();
  75.             var arr = new int[2000];
  76.             for (var i = 0; i < arr.Length; i++) {
  77.                 arr[i] = number.Next();
  78.             }
  79.  
  80.             _numbers = arr;
  81.         }
  82.     }
  83. }
Add Comment
Please, Sign In to add comment