2. Сортування методом вибору
Цей метод, як і метод сортування вставкою, розділяє масив на дві частини: ліву, вже впорядковану, та праву, ще не впорядковану. Вибирають найменший елемент невідсортованої частини. Цей елемент міняють місцями з її першим елементом, збільшуючи на одиницю довжину відсортованої частини масиву. Отже, на першому кроці алгоритму невпорядкованою частиною є весь масив, з якого вибирають мінімальний елемент. Цей елемент міняють місцями з першим елементом масиву. На другому кроці невпорядковану частину масиву складають елементи від другого до останнього. Серед цих елементів вибирають найменший, котрий міняють місцями з другим. Процес триває доти, доки у невідсортованій частині не залишиться один елемент.
Обчислювальна складність алгоритму О(n2), як і для алгоритму сортування вставками.
Опис алгоритму на псевдокоді
function selectionSort(T[n] a):
for i = 0 to n - 2
for j = i + 1 to n - 1
if a[i] > a[j]
swap(a[i], a[j])
Приклад 2. Сортування методом вибору на мові C#
static void SelectionSort(int[] a)
{
//сортування вибором
Console.WriteLine("Сортування вибором");
int min, temp;
for (int i = 0; i < a.Length - 1; i++)
{
min = i;
for (int j = i + 1; j <a.Length; j++)
{
if (a[j] < a[min])
{
min = j;
}
}
if (min != i)
{
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
}
Console.WriteLine("Відсортований масив");
for (int i = 0; i < a.Length; i++)
Console.Write(a[i]);
}
Приклад 3. Сортування списку List
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace SortList
{
class Program
{
static List<int> Selection(List<int> list)
{
for (int i = 0; i < list.Count - 1; i++)
{
int min = i;
for (int j = i + 1; j < list.Count; j++)
{
if (list[j] < list[min])
{
min = j;
}
}
int dummy = list[i];
list[i] = list[min];
list[min] = dummy;
}
return list;
}
static void Main(string[] args)
{
int[] mas = {5,2,4,6,1,3};
List<int> list = new List<int>(mas);
List<int> sortlist = new List<int>();
//Початковий список
Console.WriteLine("Початковий список");
foreach (int l in list)
{
Console.Write(l);
}
Console.WriteLine();
sortlist = Selection(list);
Console.WriteLine("Відсортований список");
foreach (int sl in sortlist)
{
Console.Write(sl);
}
Console.WriteLine();
Console.ReadKey();
}
}
}