Поиск…


Базовая сортировка

Bucket Sort - это алгоритм сортировки, в котором элементы входного массива распределяются в ведрах. После распределения всех элементов ведра сортируются по отдельности другим алгоритмом сортировки. Иногда он также сортируется рекурсивным методом.

Псевдокод для сортировки ковша

  1. Пусть n - длина входного списка L;
  2. Для каждого элемента i из L
  3. Если B [i] не пусто
  4. Положите A [i] в ​​B [i];
  5. Else B [i]: = A [i]
  6. return Concat B [i .. n] в один отсортированный список;

Пример сортировки ковша: Пример сортировки ковша

В основном люди используют парадигму ввода для небольшой оптимизации.
Вспомогательное пространство: O{n}

Реализация C #

public class BucketSort
{
    public static void SortBucket(ref int[] input)
    {
        int minValue = input[0];
        int maxValue = input[0];
        int k = 0;

        for (int i = input.Length - 1; i >= 1; i--)
        {
            if (input[i] > maxValue) maxValue = input[i];
            if (input[i] < minValue) minValue = input[i];
        }

        List<int>[] bucket = new List<int>[maxValue - minValue + 1];

        for (int i = bucket.Length - 1; i >= 0; i--)
        {
            bucket[i] = new List<int>();
        }

        foreach (int i in input)
        {
            bucket[i - minValue].Add(i);
        }

        foreach (List<int> b in bucket)
        {
            if (b.Count > 0)
            {
                foreach (int t in b)
                {
                    input[k] = t;
                    k++;
                }
            }
        }
    }

    public static int[] Main(int[] input)
    {
        SortBucket(ref input);
        return input;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow