Сортировка По Индексу Вне Диапазона

#c# #sorting

#c# #сортировка

Вопрос:

Поэтому я написал реализацию сортировки по корзинам (я использую rnd.NextDouble() для заполнения своего массива, чтобы все элементы находились в диапазоне от 0 до 1). И у меня есть количество экспериментов (10 экспериментов для каждого размера массива) и разные размеры массива (я начинаю с 1000, а затем 1000 и т. Д. До 300 000). И иногда это работает нормально, но иногда это дает мне исключение из правил:

 public static void BucketSortImplement(ref int countOfElements, ref float[] array) {  Listlt;floatgt;[] buckets = new Listlt;floatgt;[countOfElements];   for (int i = 0; i lt; countOfElements; i  )  {  buckets[i] = new Listlt;floatgt;();  }   for (int i = 0; i lt; countOfElements; i  )  {  float indexOfElement = array[i] * countOfElements;  buckets[(int)indexOfElement].Add(array[i]); // right here  }   for (int i = 0; i lt; countOfElements; i  )  {  for (int j = 0; j lt; buckets[i].Count; j  )  {  float keyElement = buckets[i][j];  int k = j - 1;   while (k gt;= 0 amp;amp; buckets[i][k] gt; keyElement)  {  buckets[i][k   1] = buckets[i][k];  k -= 1;  }   buckets[i][k   1] = keyElement;  }  }   int arrayIndex = 0;   for (int i = 0; i lt; countOfElements; i  )  {  for (int j = 0; j lt; buckets[i].Count; j  )  {  array[arrayIndex  ] = buckets[i][j];  }  } }  

Я немного сбит с толку, потому что сам алгоритм выглядит нормально, то есть я должен рассчитать array[i] * countOfElements , чтобы получить индекс, в который я могу поместить свой элемент. Не могли бы вы, пожалуйста, направить меня?

Ответ №1:

Если ваш массив содержит значение «1», это приведет к выходу за пределы диапазона, потому что, если размер списка равен 3 (например), допустимые индексы будут находиться в диапазоне [0, 2].

Комментарии:

1. Функция nextDouble() возвращает случайное число с плавающей запятой, которое больше или равно 0,0 и МЕНЬШЕ 1,0.

2. Максимальное значение следующей двойки составляет 0,99999999999999978. Если вы бросите его на плаву, вы получите 1.0.

3. Черт возьми, это интересно, сегодня я узнал кое-что еще.

4. @SergeyMiryanov Вау, большое тебе спасибо! Это решило мою проблему)