Поиск…


Выбор Сортировка Основная информация

Сортировка сортировки - это алгоритм сортировки, в частности, сортировка на месте. Он имеет временную сложность O (n2), что делает его неэффективным в больших списках и, как правило, хуже, чем аналогичная сортировка вставки. Сортировка выбора отличается своей простотой и имеет преимущества производительности по сравнению с более сложными алгоритмами в определенных ситуациях, особенно там, где ограничена вспомогательная память.

Алгоритм делит входной список на две части: подсписку отсортированных элементов, которая создается слева направо в начале (слева) списка, и подсписку оставшихся элементов, которые будут отсортированы, которые занимают остальную часть список. Первоначально отсортированный подсписок пуст, а несортированный подсписок - это весь список ввода. Алгоритм продолжается путем нахождения наименьшего (или самого большого, в зависимости от порядка сортировки) элемента в несортированном подсписке, обменивая (свопинг) его с самым левым несортированным элементом (помещая его в отсортированный порядок) и перемещая границы субблица один элемент вправо ,

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

function select(list[1..n], k)
 for i from 1 to k
     minIndex = i
     minValue = list[i]
     for j from i+1 to n
         if list[j] < minValue
             minIndex = j
             minValue = list[j]
     swap list[i] and list[minIndex]
 return list[k]

Визуализация сортировки выбора:

Анимация выбора

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

Пример сортировки сортировки

Вспомогательное пространство: O(n)
Сложность времени: O(n^2)

Реализация сортировки в C #

Я использовал язык C # для реализации алгоритма сортировки выборок.

public class SelectionSort
{
    private static void SortSelection(int[] input, int n)
    {
        for (int i = 0; i < n - 1; i++)
        {
            var minId = i;
            int j;
            for (j = i + 1; j < n; j++)
            {
                if (input[j] < input[minId]) minId = j;
            }
            var temp = input[minId];
            input[minId] = input[i];
            input[i] = temp;
        }
    }

    public static int[] Main(int[] input)
    {
        SortSelection(input, input.Length);
        return input;
    }
}

Реализация эликсира

defmodule Selection do

  def sort(list) when is_list(list) do
    do_selection(list, [])
  end

  def do_selection([head|[]], acc) do
    acc ++ [head]
  end

  def do_selection(list, acc) do
    min = min(list)
    do_selection(:lists.delete(min, list), acc ++ [min])
  end

  defp min([first|[second|[]]]) do
    smaller(first, second)
  end

  defp min([first|[second|tail]]) do
    min([smaller(first, second)|tail])
  end

  defp smaller(e1, e2) do
    if e1 <= e2 do
      e1
    else
      e2
    end
  end
end

Selection.sort([100,4,10,6,9,3])
|> IO.inspect


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