algorithm
Выбор Сортировка
Поиск…
Выбор Сортировка Основная информация
Сортировка сортировки - это алгоритм сортировки, в частности, сортировка на месте. Он имеет временную сложность 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