-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathselection_sort.os
30 lines (26 loc) · 2.57 KB
/
selection_sort.os
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Текст задачи: реализовать алгоритм Selection Sort в виде функции, которая возвращает нам отсортированный массив.
Функция СортВыбором(ИсходныйМассив)
КопияМассива = МассивКопировать(ИсходныйМассив);
ВерхГраница = КопияМассива.ВГраница();
Для ИндексВнешний = 0 По ВерхГраница Цикл // На каждой итерации индекс "первого элемента" будет сдвигаться на +1 вправо.
ИндексТекущегоМинимального = ИндексВнешний; // "Первый элемент" в начале каждой итерации = минимальный по умолчанию.
Для ИндексВнутренний = ИндексВнешний По ВерхГраница Цикл
Элемент = КопияМассива[ИндексВнутренний];
// Проверяем каждый последующий элемент подмассива с текущим минимальным на данный момент.
Если Элемент < КопияМассива[ИндексТекущегоМинимального] Тогда
ИндексТекущегоМинимального = ИндексВнутренний; // Обновляем индекс текущего минимального элемента.
КонецЕсли;
КонецЦикла;
// В конце каждой итерации меняем местами значения двух элементов = "первого" и минимального.
ПервыйЭлемент = КопияМассива[ИндексВнешний];
КопияМассива[ИндексВнешний] = КопияМассива[ИндексТекущегоМинимального];
КопияМассива[ИндексТекущегоМинимального] = ПервыйЭлемент;
КонецЦикла;
Возврат КопияМассива;
КонецФункции
// Вспомогательная функция для создания копии исходного массива.
Функция МассивКопировать(ИсходныйМассив)
СписЗнач = Новый СписокЗначений;
СписЗнач.ЗагрузитьЗначения(ИсходныйМассив);
Возврат СписЗнач.ВыгрузитьЗначения();
КонецФункции