- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
Процедура СортировкаСписка(Список)
Перем лСредний;
лЛевый= СоздатьОбъект("СписокЗначений");
лПравый = СоздатьОбъект("СписокЗначений");
Если Список.РазмерСписка()>1 Тогда
лРазмерСписка = Список.РазмерСписка();
лПозицияСреднего = Цел(лРазмерСписка/2);
лСреднее = Список.ПолучитьЗначение(лПозицияСреднего);
Для й = 1 По лРазмерСписка Цикл
Если й<>лПозицияСреднего Тогда
лПроверяемоеЗначение = Список.ПолучитьЗначение(й);
Если лПроверяемоеЗначение<лСреднее Тогда
лЛевый.ДобавитьЗначение(лПроверяемоеЗначение);
ИначеЕсли лПроверяемоеЗначение>лСреднее Тогда
лПравый.ДобавитьЗначение(лПроверяемоеЗначение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
СортировкаСписка(лЛевый);
СортировкаСписка(лПравый);
Список.УдалитьВсе();
Для й = 1 По лЛевый.РазмерСписка() Цикл
Список.ДобавитьЗначение(лЛевый.ПолучитьЗначение(й));
КонецЦикла;
Список.ДобавитьЗначение(лСреднее);
Для й = 1 По лПравый.РазмерСписка() Цикл
Список.ДобавитьЗначение(лПравый.ПолучитьЗначение(й));
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура Выполнить()
ОтсортированныйСписок = СоздатьОбъект("СписокЗначений");
СписокЗначений = СоздатьОбъект("СписокЗначений");
СписокЗначений.ДобавитьЗначение(2);
СписокЗначений.ДобавитьЗначение(7);
СписокЗначений.ДобавитьЗначение(15);
СписокЗначений.ДобавитьЗначение(16);
СписокЗначений.ДобавитьЗначение(20);
СписокЗначений.ДобавитьЗначение(21);
СписокЗначений.ДобавитьЗначение(3);
СписокЗначений.ДобавитьЗначение(5);
СписокЗначений.ДобавитьЗначение(4);
СписокЗначений.ДобавитьЗначение(14);
СписокЗначений.ДобавитьЗначение(12);
СписокЗначений.ДобавитьЗначение(13);
СписокЗначений.ДобавитьЗначение(11);
СписокЗначений.ДобавитьЗначение(19);
СписокЗначений.ДобавитьЗначение(1);
СписокЗначений.ДобавитьЗначение(8);
СписокЗначений.ДобавитьЗначение(6);
СписокЗначений.ДобавитьЗначение(17);
СписокЗначений.ДобавитьЗначение(9);
СписокЗначений.ДобавитьЗначение(10);
СписокЗначений.ДобавитьЗначение(18);
СортировкаСписка(СписокЗначений);
ВыбранноеЗначение = 0;
СписокЗначений.ВыбратьЗначение(ВыбранноеЗначение);
КонецПроцедуры
Lowezar 17.05.2012 00:56 # 0
bormand 17.05.2012 05:43 # 0
posh 03.06.2012 20:07 # 0
Но по виду это действительно qsort - самый теоретически быстрый алгоритм сортировки в среднем случае.
В чем шутка юмора?
guest 07.09.2012 15:44 # 0
Синтаксис:
Сортировать(<Направление>, <ДокументыПоДате>)
Англоязычный синоним:
Sort
Параметры:
<Направление>
Необязательный параметр. Числовое выражение. Если — 0, то сортировка по возрастанию. Если не 0 то сортировка по убыванию. Значение по умолчанию — 0.
<ДокументыПоДате>
Необязательный параметр. Имеет смысл только в том случае, если значениями списка значений являются документы. В этом случае можно задавать сортировку документов по их хронологии. Число: 1 — сортировка по хронологии документов; 0 — нет. Значение по умолчанию — 0.
Описание:
Метод Сортировать выполняет сортировку списка по значениям. Если первый элемент списка (значение в первой позиции) имеет базовый тип данных (число, строка, дата), то сортировка проводится по значениям элементов, приведенных стандартными правилами к типу первого элемента. В противном случае, если первый элемент имеет агрегатный тип данных, сортировка проводится по значениям элементов, приведенных к строковому представлению типа данных.
Пример:
Спис.Сортировать();
nixel 30.10.2012 14:08 # 0
Для 7.7 (а если я не ошибаюсь, в топике именно она) это конечно не очень актуально, но для 8.2 или 8.3 глянул бы.