viraco4a

MergeSort

Mar 19th, 2018
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. using System;
  2. using System.Linq;
  3.  
  4. namespace MergeSort
  5. {
  6. class Program
  7. {
  8.  
  9. private static void Sort(int[] arr, int startIndex, int endIndex)
  10. {
  11. if (startIndex >= endIndex)
  12. {
  13. return;
  14. }
  15.  
  16. int middleIndex = (endIndex + startIndex) / 2;
  17.  
  18. Sort(arr, startIndex, middleIndex);
  19. Sort(arr, middleIndex + 1, endIndex);
  20.  
  21. Merge(arr, startIndex, middleIndex, endIndex);
  22. }
  23.  
  24. private static void Merge(int[] arr, int startIndex, int middleIndex, int endIndex)
  25. {
  26. if (middleIndex < 0
  27. || middleIndex + 1 > arr.Length
  28. || arr[middleIndex] <= arr[middleIndex + 1])
  29. {
  30. return;
  31. }
  32.  
  33. int[] helpArr = new int[arr.Length];
  34. for (int i = startIndex; i <= endIndex; i++)
  35. {
  36. helpArr[i] = arr[i];
  37. }
  38.  
  39. int left = startIndex;
  40. int right = middleIndex + 1;
  41. for (int i = startIndex; i <= endIndex; i++)
  42. {
  43. if (left > middleIndex)
  44. {
  45. arr[i] = helpArr[right++];
  46. }
  47. else if (right > endIndex)
  48. {
  49. arr[i] = helpArr[left++];
  50. }
  51. else if (helpArr[left] <= helpArr[right])
  52. {
  53. arr[i] = helpArr[left++];
  54. }
  55. else
  56. {
  57. arr[i] = helpArr[right++];
  58. }
  59. }
  60.  
  61. }
  62.  
  63. static void Main()
  64. {
  65. var numbers = Console.ReadLine().Split(' ').Select(s => int.Parse(s)).ToArray();
  66. Sort(numbers, 0, numbers.Length - 1);
  67. Console.WriteLine(string.Join(" ", numbers));
  68. }
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment