|
Быстрая сортировка | ☑ | ||
---|---|---|---|---|
0
UserNotFound
09.08.12
✎
13:47
|
Поделитесь, пожалуйста, кодом быстрой сортировки на 1С или ссылкой на открытый источник с ним. А то что-то найденные примеры не правильно работают.
|
|||
1
aleks-id
09.08.12
✎
13:47
|
код сортировки чего?
|
|||
2
Maxus43
09.08.12
✎
13:48
|
что сортировать? сферический коней в вакууме?
|
|||
3
aleks-id
09.08.12
✎
13:48
|
практически у всех объектов есть или Сортировать или Упорядочить
|
|||
4
UserNotFound
09.08.12
✎
13:48
|
(1) Можно просто чисел.
|
|||
5
aleks-id
09.08.12
✎
13:48
|
(4) а числа эти где?
|
|||
6
anddro
09.08.12
✎
13:49
|
(5) сферические числа в вакууме
|
|||
7
UserNotFound
09.08.12
✎
13:50
|
(3) Хочется разобраться.
|
|||
8
ptiz
09.08.12
✎
13:50
|
Числа.СортироватьБыстро();
|
|||
9
UserNotFound
09.08.12
✎
13:51
|
(5) В общем без разницы.
|
|||
10
MAnt
09.08.12
✎
13:51
|
(7) wiki:Быстрая_сортировка
На 1С примерно также. |
|||
11
aleks-id
09.08.12
✎
13:53
|
тз=новый таблицазначений;
тз.добавитьколонку("число"); новстр=тз.добавить(); новстр.число=5; новстр=тз.добавить(); новстр.число=2; новстр=тз.добавить(); новстр.число=7; тз.сортировать("число Возр"); |
|||
12
anddro
09.08.12
✎
13:54
|
(7) с чем разобраться?
в запросе ORDER BY / УПОРЯДОЧИТЬ ПО у таблицы значений / дерева значений - Сортировать() у списка значений СортироватьПоЗначению() и СортироватьПоПредставлению() Этого мало? Или нужен закат солнца вручную с созданием двоичного дерева и балансировкой? |
|||
13
ssh2006
09.08.12
✎
13:55
|
(12) сказано же - "не правильно работают."
|
|||
14
UserNotFound
09.08.12
✎
13:56
|
(10) Чего-то не получается на 1С сделать. На Дельфи без проблем.
(11) (12) Надо написать именно программный код, а не использовать возможности платформы. |
|||
15
Maxus43
09.08.12
✎
13:57
|
>>Чего-то не получается на 1С сделать
что не получается? там всё 1 в 1 практически, можеш даже по англицки писать |
|||
16
MAnt
09.08.12
✎
13:58
|
(14) На 1С в каком объекте данные хранишь?
|
|||
17
UserNotFound
09.08.12
✎
13:58
|
(12) Не правильно работают те, что написаны на 1С.
|
|||
18
jk3
09.08.12
✎
13:58
|
(14) Лаба?
|
|||
19
UserNotFound
09.08.12
✎
13:59
|
(18) Нет, чтобы просто разобраться.
|
|||
20
Бледно Золотистый
09.08.12
✎
13:59
|
(17)Значит криво написаны, 1с тут причем?
|
|||
21
Molinor
09.08.12
✎
14:00
|
Покажи код.
|
|||
22
jk3
09.08.12
✎
14:01
|
(19) Тогда в чём проблема?
Рекурсия в 1с точно так же работает. Пиши с нуля, будет проще, чем ковырять чужой копрокод. |
|||
23
hhhh
09.08.12
✎
14:01
|
похоже опять на тему: почему "9" больше чем "10"?
|
|||
24
anddro
09.08.12
✎
14:01
|
(17) какой критерий "правильности"? Может ты просто сортируешь значения ссылок, а хочешь увидеть сортировку по наименованию?
|
|||
25
FIXXXL
09.08.12
✎
14:04
|
(0) ищи по слову ИНДЕКС
быстро и всерьез |
|||
26
UserNotFound
09.08.12
✎
14:05
|
(20) 1С тут не при чем. Только одни кривые примеры мне попадались.
|
|||
27
UserNotFound
09.08.12
✎
14:06
|
(24) Я сортирую просто числа.
|
|||
28
Molinor
09.08.12
✎
14:07
|
(27) Показывай код уже.
|
|||
29
jk3
09.08.12
✎
14:07
|
(26) Не удивлён насчёт кривых примеров, т.к. смысла нет писать красиво ради сферических коней :)
|
|||
30
UserNotFound
09.08.12
✎
14:07
|
(21) Функция СравнитьЗначения(Знач1, Знач2)
Если Знач1>Знач2 Тогда Возврат 1; КонецЕсли; Если Знач1<Знач2 Тогда Возврат -1; КонецЕсли; Возврат 0; КонецФункции Функция ПолучитьЗначение(Список, Номер) стр=""; Возврат Список.ПолучитьЗначение(Номер, стр); КонецФункции Процедура УстановитьЗначение(Список, Номер, Значение) Список.УстановитьЗначение(Номер, Значение); КонецПроцедуры Процедура qs_0(s_arr, first, last) i = first; j = last; x = ПолучитьЗначение(s_arr, (first + last) / 2); Пока СравнитьЗначения(ПолучитьЗначение(s_arr, i), x)=-1 Цикл i=i+1; КонецЦикла; Пока СравнитьЗначения(ПолучитьЗначение(s_arr, j), x)=1 Цикл j=j-1; КонецЦикла; Если i <= j Тогда Если i < j Тогда к=ПолучитьЗначение(s_arr, i); УстановитьЗначение(s_arr, i, ПолучитьЗначение(s_arr, j)); УстановитьЗначение(s_arr, j, к); КонецЕсли; i=i+1; j=j-1; КонецЕсли; Пока i <= j Цикл Пока СравнитьЗначения(ПолучитьЗначение(s_arr, i), x)=-1 Цикл i=i+1; КонецЦикла; Пока СравнитьЗначения(ПолучитьЗначение(s_arr, j), x)=1 Цикл j=j-1; КонецЦикла; Если i <= j Тогда Если i < j Тогда к=ПолучитьЗначение(s_arr, i); УстановитьЗначение(s_arr, i, ПолучитьЗначение(s_arr, j)); УстановитьЗначение(s_arr, j, к); КонецЕсли; i=i+1; j=j-1; КонецЕсли; КонецЦикла; Если i < last Тогда qs_0(s_arr, i, last); КонецЕсли; Если first < j Тогда qs_0(s_arr, first,j); КонецЕсли; КонецПроцедуры Процедура Сортировать(Список, Размер="", Первый="", Последний="") Если ПустоеЗначение(Первый)=1 Тогда Первый=1; КонецЕсли; Если ПустоеЗначение(Последний)=1 Тогда Последний=Размер; КонецЕсли; qs_0(Список, Первый, Последний); КонецПроцедуры |
|||
31
anddro
09.08.12
✎
14:10
|
(30) и если в этот алгоритм на вход подать список уже упорядоченных элементов ...
|
|||
32
jk3
09.08.12
✎
14:16
|
(30) В заголовке v8, код на v7
|
|||
33
MAnt
09.08.12
✎
14:18
|
На 1С это выглядит как-то так
Процедура БыстраяСортировка(мДанные,НижняяГраница,ВерняяГраница) i = НижняяГраница; j = ВерняяГраница; m = мДанные[Цел((i+j)/2)]; Пока Истина Цикл Пока мДанные[i] < m Цикл i = i + 1; КонецЦикла; Пока мДанные[j] > m Цикл j = j - 1; КонецЦикла; Если i<=j Тогда wsp = мДанные[i]; мДанные[i] = мДанные[j]; мДанные[j] = wsp; i = i + 1; j = j - 1; КонецЕсли; Если i>j Тогда Прервать; КонецЕсли; КонецЦикла; Если НижняяГраница < j Тогда БыстраяСортировка(мДанные,НижняяГраница,j); КонецЕсли; Если i < ВерняяГраница Тогда БыстраяСортировка(мДанные,i,ВерняяГраница); КонецЕсли; КонецПроцедуры Процедура КнопкаВыполнитьНажатие(Кнопка) мДанные = Новый Массив(10); ГенераторЧисел = Новый ГенераторСлучайныхЧисел(0); сЧисла = ""; Для Счетчик = 0 По 9 Цикл мДанные[Счетчик] = ГенераторЧисел.СлучайноеЧисло(); сЧисла = сЧисла + мДанные[Счетчик] + "; "; КонецЦикла; Сообщить(сЧисла); БыстраяСортировка(мДанные,0,9); сЧисла = ""; Для Счетчик = 0 По 9 Цикл сЧисла = сЧисла + мДанные[Счетчик] + "; "; КонецЦикла; Сообщить(сЧисла); КонецПроцедуры |
|||
34
UserNotFound
09.08.12
✎
14:19
|
(32) Я его на v8 переделывал. Это пример того что нашел в Интернете. То что есть на v8 к показу пока не годится :)
|
|||
35
UserNotFound
09.08.12
✎
14:20
|
(33) Спасибо.
|
|||
36
FIXXXL
09.08.12
✎
14:22
|
запросом же быстрее
|
|||
37
MAnt
09.08.12
✎
14:26
|
(36) Быстрее чем что? Если данные брать из базы - быстрее, если из какого-нибудь файла подгружаются, то не факт.
|
|||
38
UserNotFound
09.08.12
✎
14:26
|
(36) Чтобы знать. Зачем учить пузырьковую сортировку, если она не эффективная?
|
|||
39
anddro
09.08.12
✎
14:28
|
(38) тогда учи их все wiki:Алгоритм_сортировки
|
|||
40
UserNotFound
09.08.12
✎
14:30
|
(39) Спасибо, я в курсе.
|
|||
41
FIXXXL
09.08.12
✎
14:32
|
(37) быстрее и читабельнее вышеприведенных портянок
|
|||
42
UserNotFound
09.08.12
✎
14:35
|
(41) Вопрос состоит в том, чтобы знать больше, чем 1С.
|
|||
43
FIXXXL
09.08.12
✎
19:26
|
(42) иди за индексы читай, Коперник :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |