【问题标题】:Bucket sort in C# - how to?C# 中的桶排序 - 如何?
【发布时间】:2015-12-06 07:28:34
【问题描述】:
static void Main(string[] args)
{
    double[] array = { 0.37, 0.25, 0.86, 0.23, 0.09, 0.21, 0.17, 0.71 };
    double[] sortedArray =BucketSort(array);

    // PrintResult(sortedArray);
}

public double[] BucketSort(double[] array)
{
    List<List<double>> buckets = new List<List<double>>();
    InitializeBuckets(buckets);

    Scatter(array, buckets);

    int i = 0;
    foreach (List<double> bucket in buckets)
    {
        double[] arr = bucket.ToArray();
        InsertionSort(arr);

        foreach (double d in arr)
        {
            array[i++] = d;
        }
    }

    return array;
}

private void Scatter(double[] array, List<List<double>> buckets)
{
    foreach (double value in array)
    {
        int bucketNumber = GetBucketNumber(value);
        buckets[bucketNumber].Add(value);
    }
}

private void InsertionSort(double[] array)
{
    int j;
    double temp;

    for (int i = 1; i < array.Length; i++)
    {
        j = i;
        while (j > 0 && array[j] < array[j - 1])
        {
            temp = array[j];
            array[j] = array[j - 1];
            array[j - 1] = temp;
            j--;
        }
    }
}

private int GetBucketNumber(double value)
{
    double val = value * 10;
    int bucketNumber = (int)Math.Floor(val);
    return bucketNumber;
}

private static void InitializeBuckets(List<List<double>> buckets)
{
    for (int i = 0; i < 10; i++)
    {
        List<double> a  = new List<double>();
        buckets.Add(a);
    }
}

我收到一个错误

非静态字段、方法或属性需要对象引用

谁能解决这个问题并解释一下?

【问题讨论】:

    标签: c# sorting bucket-sort


    【解决方案1】:

    Main 方法是一个静态方法,这意味着您可以在没有对象实例的情况下调用它。其余方法都是实例方法,因此您需要一个声明它们的类的实例才能调用它们。

    如果一个方法没有从你的类中访问非静态字段和方法 可以将其设为静态以使其使用更加灵活。因此,在您的代码中,如果您将所有方法设为静态,错误就会消失。

    public static double[] BucketSort(double[] array)
    {
        ...
    }
    

    或者,您可以创建对象的实例并以这种方式调用它。 ?假设包含类是Program 并且它有一个默认构造函数,你的代码将是:

      var program = new Program();
      double[] sortedArray = program.BucketSort(array);
    

    【讨论】:

      【解决方案2】:

      将 static 关键字添加到您的方法中。更改这些方法:

      • 桶排序
      • 分散
      • 插入排序
      • GetBucketNumber

      例子:

      public static double[] BucketSort(double[] array)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-01
        • 1970-01-01
        • 2012-03-08
        • 1970-01-01
        • 2013-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多