- 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;
	СписокЗначений.ВыбратьЗначение(ВыбранноеЗначение);
	
КонецПроцедуры
                                 
        
Но по виду это действительно qsort - самый теоретически быстрый алгоритм сортировки в среднем случае.
В чем шутка юмора?
Синтаксис:
Сортировать(<Направление>, <ДокументыПоДате>)
Англоязычный синоним:
Sort
Параметры:
<Направление>
Необязательный параметр. Числовое выражение. Если — 0, то сортировка по возрастанию. Если не 0 то сортировка по убыванию. Значение по умолчанию — 0.
<ДокументыПоДате>
Необязательный параметр. Имеет смысл только в том случае, если значениями списка значений являются документы. В этом случае можно задавать сортировку документов по их хронологии. Число: 1 — сортировка по хронологии документов; 0 — нет. Значение по умолчанию — 0.
Описание:
Метод Сортировать выполняет сортировку списка по значениям. Если первый элемент списка (значение в первой позиции) имеет базовый тип данных (число, строка, дата), то сортировка проводится по значениям элементов, приведенных стандартными правилами к типу первого элемента. В противном случае, если первый элемент имеет агрегатный тип данных, сортировка проводится по значениям элементов, приведенных к строковому представлению типа данных.
Пример:
Спис.Сортировать();
Для 7.7 (а если я не ошибаюсь, в топике именно она) это конечно не очень актуально, но для 8.2 или 8.3 глянул бы.