2015-12-06 4 views
1
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# - как?

Ссылка на объект необходим для не статического поля, метода или свойства

Может кто-нибудь решить эту проблему и объяснить это?

ответ

3

Метод Main - это статический метод, который означает, что вы можете вызывать его без экземпляра объекта. Остальные методы - это методы экземпляра, поэтому вам нужен экземпляр класса, в котором они объявлены, чтобы вызвать их.

Если метод не имеет доступа к нестатическим полям и методам из класса, вы можете сделать его статическим, чтобы сделать его использование более гибким. Поэтому в вашем коде, если вы сделаете все методы статическими, ошибка исчезнет.

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

В качестве альтернативы вы можете создать экземпляр своего объекта и называть его таким образом. ? Предполагая, содержащий класс Program и имеет конструктор по умолчанию, ваш код будет:

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

Спасибо you..It работал –

1

Добавить статическое ключевое слово к вашим методам. Изменение этих методов:

  • блочной сортировка
  • Разброс
  • сортировка вставки
  • GetBucketNumber

Пример:

общественный статического двойной [] блочная сортировка (двойной [] массив)

Смежные вопросы