c# - 调用归并排序 C#

标签 c# sorting merge mergesort

我写了一个合并排序程序,但我在从另一个类调用它时遇到问题。我需要帮助。出于某种原因,在我输入大小和最大数量后,输出中出现黑屏。我相信解决方案很简单,但我自己找不到解决方案 这是对数字进行排序的类

 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();

最佳答案

因为您没有提供它们,我编写了缺少的 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

关于c# - 调用归并排序 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50520139/

相关文章:

java - 仅在 Java 中对键进行排序的 Multimap

python - `PriorityQueue` 是否尊重元组的顺序?

arrays - 合并和组合数组中的哈希值

git - 避免在 git 中 merge 提交

java - 如何将两个 List<String> 合并为一个 List<String>?

C#.NET MVC4 - 方法的不可为空类型的参数的空条目

c# - 验证 SQL 在 WebMatrix/Razor 中是否正确执行?

c - C中的数组桶排序

c# - 为什么 WCF 中需要 KnownTypeAttribute

c# - 如何将值传递给以@开头的c#参数