Сортировка выбором
Материал из Поле цифровой дидактики
Описание | Сортировка выбором (Selection sort) — алгоритм сортировки. |
---|---|
Область знаний | Информатика |
Область использования (ISTE) | |
Возрастная категория |
|
Поясняющее видео | |
Близкие рецепту понятия | |
Среды и средства для приготовления рецепта: |
Сортировка выбором (Selection sort) — алгоритм сортировки. Может быть как устойчивый, так и неустойчивый.
Шаги алгоритма:
- находим номер минимального значения в текущем списке
- производим обмен этого значения со значением первой неотсортированной позиции (обмен не нужен, если минимальный элемент уже находится на данной позиции)
- теперь сортируем хвост списка, исключив из рассмотрения уже отсортированные элементы
C++
template <typename type_arr>
void selection_sort(type_arr *arr, int size)
{
for (int i = 0; i < size - 1; i++)
{
int min_index = i;
for (int j = i + 1; j < size; j++)
{
if (arr[j] < arr[min_index])
{
min_index = j;
}
}
if (min_index != i)
{
swap(arr[i], arr[min_index]);
}
}
}
Java
public static <T extends Comparable<? super T>>
void sort(T[] array) {
for (int i = 0; i < array.length - 1; ++i) {
int minPos = i;
for (int j = i + 1; j < array.length; ++j) {
if (array[j].compareTo(array[minPos]) < 0) {
minPos = j;
}
}
T saveValue = array[minPos];
array[minPos] = array[i];
array[i] = saveValue;
}
}
Ruby
def selection_sort(array)
for min in 0..array.count-2
least = min
for j in (min + 1)..array.count-1
if array[j] < array[least]
least = j
end
end
temp = array[min]
array[min] = array[least]
array[least] = temp
end
end
Swift
func selectionSort<Element>(_ array: inout Array<Element>) where Element: Comparable {
for min in 0..<array.count - 1 {
for j in min..<array.count {
if array[j] < array[min] {
let temp = array[min]
array[min] = array[j]
array[j] = temp
}
}
}
}
Python
def select_sort(A):
for i in range(len(A)-1):
for k in range(i+1, len(A)):
if A[k] < A[i]:
A[k], A[i] = A[i], A[k]
Go
func selectionSort(nums []int) {
n := len(nums)
for i := 0; i < n; i++ {
min := i
for j := i + 1; j < n; j++ {
if nums[j] < nums[min] {
min = j
}
}
nums[i], nums[min] = nums[min], nums[i]
}
}