by Ivan Todorov
Copyright © 2021
1. Как работи методът на пряката селекция?
Алгоритъмът работи по следния начин:
-
Намира най-малкия елемент в списъка като сравнява първият елемент с всички останали
-
Разменя го с елемента на първа позиция
-
Повтаря горните две стъпки за всеки следващ елемент
2. Пример стъпка по стъпка
Нека имаме масив със следните елементи: 64,25,12,22,11 и искаме да го сортираме във възходящ ред като използваме метода на пряката селекция. На всяка стъпка елементите, които са удебелени биват разменяни.
Първо преминаване:
64 25 12 22 11 25 64 12 22 11
25 64 12 22 11 12 64 25 22 11
12 64 25 22 11 12 64 25 22 11
12 64 25 22 11 11 64 25 22 12
След първото преминаване най-малкият елемент на масива се намира на първа позиция.
Второ преминаване:
11 64 25 22 12 11 25 64 22 12
11 25 64 22 12 11 22 64 25 12
11 22 64 25 12 11 12 64 25 22
Трето преминаване:
11 12 64 25 22 11 12 25 64 22
11 12 25 64 22 11 12 22 64 25
Четвърто преминаване:
11 12 22 64 25 11 12 22 25 64
2. Пример на C# за сортиране на числа по метода на пряката селекция
using System; class SelectionSort { static void Main() { int[] array = new int[] { 64, 25, 12, 22, 11 }; for (int i = 0; i < array.Length – 1; i++) { for (int j = i + 1; j < array.Length; j++) { if (array[i] > array[j]) // swap items { int tmp = array[i]; array[i] = array[j]; array[j] = tmp; } } } for (int i = 0; i < array.Length; i++) // print sorted array { Console.Write(array[i] + " "); } } }
3. Пример на C++ за сортиране на числа по метода на пряката селекция
#include <iostream> using namespace std; int main() { int array[5]={31,34,12,22,11}; for(int i=0; i<5; ++i) { int min = i; for(int j=i; j<5; ++j) if(array[min]>array[j]) min = j; swap(array[min],array[i]); } for(int i=0; i<5; i++) { cout << array[i] << "t"; } return 0; }
4. Анализ
Методът на пряката селекция не е труден да се анализира в сравнение с други сортиращи алгоритми. За да намерим най-малкият елемент се изисква да сканираме всички n на брой елементи (това отнема n – 1 сравнения) и след това да го разменим с първата позиция. За да намерим следващият най-малък елемент се изисква да сканираме оставащите n – 1 елементи и така нататък. Общият брой сравнения е равен на
(n − 1) + (n − 2) + … + 2 + 1 = n(n − 1) / 2 = Θ(n2)
според формулата за сбор на аритметична прогресия. Всяко от тези n – 1 преминавания по масива изисква една размяна на елементи (последният елемент е вече на правилното място).
Published: Mar 21, 2021
Latest Revision: Mar 21, 2021
Ourboox Unique Identifier: OB-1082976
Copyright © 2021