вызов слияния сортировки c # - PullRequest
0 голосов
/ 25 мая 2018

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

 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;
        }
    }

И это класс, в котором я пытаюсь вызватьmergesort

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 ]

0 голосов
/ 25 мая 2018

Похоже, что вы пропустили 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);
0 голосов
/ 25 мая 2018

Поскольку вы их не предоставили, я написал недостающие методы 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();
}

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

Output

...