Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找和解决方法问题_C#_Sorting - Fatal编程技术网

C# 查找和解决方法问题

C# 查找和解决方法问题,c#,sorting,C#,Sorting,我目前正在做一个作业,我需要在程序中找到阻止它执行的错误。这是一个比较排序程序,其中有两种排序方法进行比较,合并排序和计数排序。它为我提供了无重载的insert方法,需要1个参数的消息,但我无法找到或修复导致错误的原因,任何使比较工作正常的一般想法或修复方法都将不胜感激 using System; using System.Collections; namespace Sort { class Program { static void Main(string[] args) {

我目前正在做一个作业,我需要在程序中找到阻止它执行的错误。这是一个比较排序程序,其中有两种排序方法进行比较,合并排序和计数排序。它为我提供了无重载的insert方法,需要1个参数的消息,但我无法找到或修复导致错误的原因,任何使比较工作正常的一般想法或修复方法都将不胜感激

using System;
using System.Collections;
namespace Sort
{
class Program
{
    static void Main(string[] args)
    {
        Random rdm = new Random();
        ArrayList data = new ArrayList();
        ArrayList dataB = new ArrayList();
        int size = 50000;
        int[] dta = new int[size];
        int[] dta50 = new int[50];
        int randomNum;
        DateTime startTime, endTime;
        int i;
        // Show both methods worked
        for (i = 0; i < 50; i++)
        {
            randomNum = rdm.Next(100);
            data.Add(randomNum);
            dta50[i] = randomNum;
        }
        dataB = CountingSort(data);
        PrintArray("Merge Sort:", dataB);
        MergeSort(dta50);
        Console.WriteLine();
        Console.WriteLine("\nCounting Sort:");
        Console.WriteLine();
        for (int x = 0; x < 50; x++)
            Console.Write(dta50[x] + " ");

        Console.WriteLine();
        Console.WriteLine("\nCounting Sort\tMerge Sort");
        for (int n = 1; n < 20; n++) // run 20 times
        {
            data.Clear();
            for (i = 0; i < size; i++)
            {
                randomNum = rdm.Next(size);
                data.Add(randomNum);
                dta[i] = randomNum;
            }
            // Counting Sorting

            startTime = DateTime.Now;
            CountingSort(data);
            endTime = DateTime.Now;
            TimeSpan howlong = endTime.Subtract(startTime);
            Console.Write("  {0}ms", howlong.Milliseconds);

            // Merge Sorting
            startTime = DateTime.Now;
            MergeSort(dta);
            endTime = DateTime.Now;
            TimeSpan howlong1 = endTime.Subtract(startTime);
            Console.WriteLine("\t\t{0}ms", howlong1.Milliseconds);
        }
        Console.ReadLine();
    }
   public static void MergeSort(int[] input, int left, int right)
    {
   if (left < right)
   {
    int middle = (left + right) / 2;

    MergeSort(input, left, middle);
    MergeSort(input, middle + 1, right);

    //Merge
    int[] leftArray = new int[middle - left + 1];
    int[] rightArray = new int[right - middle];

    Array.Copy(input, left, leftArray, 0, middle - left + 1);
    Array.Copy(input, middle + 1, rightArray, 0, right - middle);

    int i = 0;
    int j = 0;
    for (int k = left; k < right + 1; k++)
    {
        if (i == leftArray.Length)
        {
            input[k] = rightArray[j];
            j++;
        }
        else if (j == rightArray.Length)
        {
            input[k] = leftArray[i];
            i++;
        }
        else if (leftArray[i] <= rightArray[j])
        {
            input[k] = leftArray[i];
            i++;
        }
        else
        {
            input[k] = rightArray[j];
            j++;
        }
    }
}
     }
     private static int[] CountingSort(int[] arr, int min, int max)
   {
       int[] count = new int[max - min + 1];
       int z = 0;

       for (int i = 0; i < count.Length; i++) { count[i] = 0; }
       for (int i = 0; i < arr.Length; i++) { count[arr[i] - min]++; }

       for (int i = min; i <= max; i++)
       {
           while (count[i - min]-- > 0)
           {
               arr[z] = i;
               z++;
           }
       }
       return arr;
   }
    static void PrintArray(string title, ArrayList dt)
    {
        int cc = 0;
        Console.WriteLine("\n" + title + "\n");
        foreach (int item in dt)
        {
            if (cc < 10)
                Console.Write("{0,4}", item);
            else
            { Console.WriteLine(); cc = 0; }

        }
    }
}
}

看看你的功能:

public static void MergeSort(int[] input, int left, int right)
private static int[] CountingSort(int[] arr, int min, int max)
当您调用它们时,它们每个都需要三个值。看看您是如何调用它们的:

MergeSort(dta50);
CountingSort(data);
MergeSort(dta);
你提供的是一个值,不是三个

在其他地方,您以不同的方式调用它们:

MergeSort(input, left, middle);
MergeSort(input, middle + 1, right);
在这些情况下,您提供三个值


您需要为函数提供所需的值。否则,代码无法知道该做什么。

您能否显示完整的错误以及它在哪一行>?错误消息无疑会准确地告诉您问题所在。是的,以下是错误:方法“计数排序”的无重载接受1个参数-第25行方法“合并排序”的无重载接受1个参数-第27行