Вариант сортировки числового ряда (от малого к великому) методом шейкера. Считается более оптимизированным и быстрым алгоритмом сортировки по сравнению с сортировкой пузырьковым методом. Однако, есть тоже ряд отрицательных сторон (ну куда же без них). Подробно обо всём расскажет google, ну а ниже приведён код функции. Область применения так же достаточно широка.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
Функция СортировкаШейкеромРядаЧисел(МассивЭлементов) Экспорт // Определяем границы массива НижняяГраница = 0; ВерхняяГраница = МассивЭлементов.Количество()-1; // Определяем счётчики циклов, они же - границы неотсортированной части массива счётчик1 = МассивЭлементов.Количество()-1; счётчик2 = 0; // Поехали сортировать массив Пока НижняяГраница < ВерхняяГраница Цикл // Проход снизу вверх Пока счётчик1 >= 0 Цикл счётчик1 = счётчик1-1; Если счётчик1 = 0 Тогда Прервать; КонецЕсли; Если МассивЭлементов[счётчик1-1] > МассивЭлементов[счётчик1] Тогда МладшийЭлемент = МассивЭлементов[счётчик1]; СтаршийЭлемент = МассивЭлементов[счётчик1-1]; МассивЭлементов[счётчик1-1] = МладшийЭлемент; МассивЭлементов[счётчик1] = СтаршийЭлемент; счётчик2 = счётчик1; КонецЕсли; КонецЦикла; НижняяГраница = счётчик2+1; // Проход сверху вниз счётчик1 = 0; Пока счётчик1 <= ВерхняяГраница Цикл счётчик1 = счётчик1+1; Если счётчик1 = МассивЭлементов.Количество() Тогда Прервать; КонецЕсли; Если МассивЭлементов[счётчик1-1] > МассивЭлементов[счётчик1] Тогда МладшийЭлемент = МассивЭлементов[счётчик1]; СтаршийЭлемент = МассивЭлементов[счётчик1-1]; МассивЭлементов[счётчик1-1] = МладшийЭлемент; МассивЭлементов[счётчик1] = СтаршийЭлемент; счётчик2 = счётчик1; КонецЕсли; КонецЦикла; ВерхняяГраница = счётчик2-1; КонецЦикла; Возврат МассивЭлементов; КонецФункции |