Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритми та структури даних ЗПІ-91-20210115T104612Z-001 / Лекція 9. Алгоритми сортування.docx
Скачиваний:
47
Добавлен:
15.01.2021
Размер:
96.54 Кб
Скачать

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();

}

}

}