Количество инверсий в массиве - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день. Необходимо написать программу, которая выведет количество инверсий в массиве. Помогите разобраться и найти где ошибка. Дано:
Листинг программы
  1. public class SortProblem
  2. {
  3. public static void Main()
  4. {
  5. Sort();
  6. }
  7. public static void Sort()
  8. {
  9. var a = new []
  10. {
  11. 11,86,232,28,8,145,588,1,307,179,77,792,693,678,481,888,574,695,624,866,467,434,907,259,130,37,25,373,214,268,108,672,371,866,863,279,22,233,336,830,374,439,144,234,360,617,244,5,566,847,476,493,56,618,202,576,179,972,898,970,119,214,786,38,71,404,420,827,814,201,865,341,358,794,492,27,290,672,899,512,792,20,807,367,792,615,616,753,663,287,99,49,334,366,711,160,652,105,162,955
  12. };
Я написал код, который выдает 2232, что не является правильным ответом. И не могу понять, где ошибка:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. public class SortProblem
  7. {
  8. static double inversionsCount;
  9. public static void Main()
  10. {
  11. var arr = new[]
  12. {
  13. 11,86,232,28,8,145,588,1,307,179,77,792,693,678,481,888,574,695,624,866,467,434,907,259,130,37,25,373,214,268,108,672,371,866,863,279,22,233,336,830,374,439,144,234,360,617,244,5,566,847,476,493,56,618,202,576,179,972,898,970,119,214,786,38,71,404,420,827,814,201,865,341,358,794,492,27,290,672,899,512,792,20,807,367,792,615,616,753,663,287,99,49,334,366,711,160,652,105,162,955
  14. };
  15. inversionsCount = 0;
  16. arr = Sort(arr);
  17. Console.Write($"{inversionsCount}");
  18. Console.ReadLine();
  19. }
  20. static int[] Sort(int[] buff)
  21. {
  22. if (buff.Length > 1) //Если длинна массива больше 1
  23. {
  24. int[] left = new int[buff.Length / 2]; // массив left равен длинна вставленного массива разделить на 2
  25. int[] right = new int[buff.Length - left.Length]; // массив right равен длинна вставленного массива минус массив left
  26. for (int i = 0; i < left.Length; i++) // равно 0 , меньше длинны массива left, добавялем 1
  27. {
  28. left[i] = buff[i]; // результат left[i] = buff[i]
  29. }
  30. for (int i = 0; i < right.Length; i++) // массив right
  31. {
  32. right[i] = buff[left.Length + i];
  33. }
  34. /*Сортируем массивы*/
  35. if (left.Length > 1)
  36. left = Sort(left);
  37. if (right.Length > 1)
  38. right = Sort(right);
  39. buff = MergeSort(left, right);
  40. }
  41. return buff;
  42. }
  43. static int[] MergeSort(int[] left, int[] right)
  44. {
  45. int[] buff = new int[left.Length + right.Length];
  46. int i = 0; //соединенный массив
  47. int l = 0; //левый массив
  48. int r = 0; //правый массив
  49. for (; i < buff.Length; i++)
  50. {
  51. if (r >= right.Length)
  52. {
  53. buff[i] = left[l];
  54. l++;
  55. }
  56. else if (l < left.Length && left[l] < right[r])
  57. {
  58. buff[i] = left[l];
  59. l++;
  60. }
  61. else
  62. {
  63. buff[i] = right[r];
  64. r++;
  65. if (l < left.Length)
  66. inversionsCount += left.Length - l;
  67. }
  68. }
  69. return buff;
  70. }
  71. }

Решение задачи: «Количество инверсий в массиве»

textual
Листинг программы
  1. else if (l < left.Length && left[l] <= right[r])

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы