Вызов merge sort С#

Я написал программу сортировки слиянием, но у меня проблемы с вызовом этого из другого класса. Мне нужна помощь. По какой-то причине после ввода размера и максимального числа a вы получите черный экран на выходе. Я считаю, что решение довольно простое, но я не могу найти решение самостоятельно. Это класс, в котором он сортирует числа

class MergeSort
 {
 public int[] Sort(int[] unsortedSequence)
 {
 int[] left;
 int[] right;
 int[] result = new int[unsortedSequence.Length];
 if (unsortedSequence.Length <= 1)
 return unsortedSequence;

 int midPoint = unsortedSequence.Length / 2;
 left = new int[midPoint];
 if (unsortedSequence.Length % 2 == 0)
 right = new int[midPoint];
 else
 right = new int[midPoint + 1];
 for (int i = 0; i < midPoint; i++)
 left[i] = unsortedSequence[i];

 int x = 0;

 for (int i = midPoint; i < unsortedSequence.Length; i++)
 {
 right[x] = unsortedSequence[i];
 x++;
 }
 left = Sort(left);
 right = Sort(right);
 result = merge(left, right);
 return result;
 }

 public static int[] merge(int[] left, int[] right)
 {
 int resultLength = right.Length + left.Length;
 int[] result = new int[resultLength];
 int indexLeft = 0, indexRight = 0, indexResult = 0;
 while (indexLeft < left.Length || indexRight < right.Length)
 {
 if (indexLeft < left.Length && indexRight < right.Length)
 {
 if (left[indexLeft] <= right[indexRight])
 {
 result[indexResult] = left[indexLeft];
 indexLeft++;
 indexResult++;
 }
 else
 {
 result[indexResult] = right[indexRight];
 indexRight++;
 indexResult++;
 }
 }
 else if (indexLeft < left.Length)
 {
 result[indexResult] = left[indexLeft];
 indexLeft++;
 indexResult++;
 }
 else if (indexRight < right.Length)
 {
 result[indexResult] = right[indexRight];
 indexRight++;
 indexResult++;
 }
 }
 return result;
 }
 }

И это класс, в котором я пытаюсь назвать объединение

class Program
 {
 static void Main(string[] args)
 {
 Console.Write("How Many Random Numbers Would you like to Generate : ");
 int n = Convert.ToInt32(Console.ReadLine());
 Console.Write("What is the Maximum Random Number Would you like to Generate : ");
 int max = Convert.ToInt32(Console.ReadLine());
 Console.Clear();
 int[] unsortedSequence = generateRandomSequence(n, max);
 MergeSort mergeSortEngine = new MergeSort();
 int[] mergeSortedArray = mergeSortEngine.Sort(unsortedSequence);
 Console.Write("Output for Merge Sort: \n\n");
 OutputSequence(mergeSortedArray);
 Console.WriteLine("\n\nPress Any Key to Continue...");
 Console.ReadKey();
 Console.Clear();
2 ответа

Поскольку вы не предоставили их, я написал отсутствующие методы generateRandomSequence() и OutputSequence, чтобы проверить ваш код, и я не могу воспроизвести вашу проблему. Возможно, вы должны сравнить их со своими:

static int[] generateRandomSequence(int count, int max)
{
 Random rn = new Random();
 int[] seq = new int[count];
 for (int i = 0; i < count; ++i)
 {
 seq[i] = rn.Next(0, max + 1);
 }
 return seq;
}

static void OutputSequence(int[] array)
{
 for (int i = 0; i < array.Length; ++i)
 {
 if (i > 0)
 {
 Console.Write(", ");
 }
 Console.Write(array[i]);
 }
 Console.WriteLine();
}

Вывод из вашего кода с использованием вышеуказанных методов:


Похоже, что вы отсутствуете generateRandomSequence(n, max);

Это может быть похоже на

public static int[] generateRandomSequence(int n, int max)
 {
 var rnd = new Random();
 int[] seq = new int[n];
 for (int ctr = 0; ctr < n; ctr++)
 {
 seq[ctr] = rnd.Next(1, max + 1);
 }
 return seq;
 }

Затем в классе Program/Test после Console.Write("Output for Merge Sort: \n\n"); вы можете перебирать цикл foreach для отображения отсортированного массива.

foreach (var item in mergeSortedArray)
 {
 Console.WriteLine("{0}", item);
 }

 //OutputSequence(mergeSortedArray);

licensed under cc by-sa 3.0 with attribution.