|   |   | 
| 
 | Сортировка слиянием | ☑ | ||
|---|---|---|---|---|
| 0
    
        vi0 10.07.18✎ 16:50 | 
        Предлагаю вспомнить вузовскую программу - сортировка слиянием через рекурсию. У кого какая есть критика, мысли - прошу высказываться
 Функция mergeSort(A) n = A.Количество(); if n = 1 Тогда return A КонецЕсли; middle = Цел(n/2); leftHalf = ЧастьМассива(A, 0, middle-1); rightHalf = ЧастьМассива(A, middle, n-1); L = mergeSort(leftHalf); // разбиваем еще раз R = mergeSort(rightHalf); // return merge(L, R); // сортировка слиянием КонецФункции function merge(A, B) // дошли нижнего уровня рекурсии if not ЗначениеЗаполнено(A) then return B; endif; if not ЗначениеЗаполнено(B) then return A; endif; An = A.Количество()-1; Bn = B.Количество()-1; if A[0] < B[0] then m = merge(ЧастьМассива(A,1,An), B); return concat(A[0], m); else m = merge(A, ЧастьМассива(B,1,Bn)); return concat(B[0], m); endif КонецФункции Функция concat(Значение, Массив) Результат = Массив; Результат.Вставить(0, Значение); возврат Результат; КонецФункции Функция ЧастьМассива(Массив, ИндексПервого, ИндексПоследнего) результат = Новый Массив; Для сч=ИндексПервого по ИндексПоследнего Цикл результат.Добавить(Массив[сч]); КонецЦикла; Возврат результат; КонецФункции Процедура Пример() A = new Array; A.Добавить(6); A.Добавить(5); A.Добавить(3); A.Добавить(1); A.Добавить(8); A.Добавить(7); A.Добавить(2); A.Добавить(4); A_сорт = mergeSort(A); Для каждого элемент Из A_сорт Цикл Сообщить(элемент); КонецЦикла; КонецПроцедуры | |||
| 1
    
        vi0 10.07.18✎ 16:54 | 
        в качестве иллюстрации
 https://ru.wikipedia.org/wiki/Сортировка_слиянием#/media/File:Merge-sort-example-300px.gif | |||
| 2
    
        МихаилМ 10.07.18✎ 17:23 | 
        цель какая ?     | |||
| 3
    
        vi0 11.07.18✎ 03:58 | 
        Погружаюсь в алгоритмику
 интересна обратная связь от сообщества | |||
| 4
    
        МихаилМ 11.07.18✎ 04:09 | 
        для 1с алгоритм медленный, тк требует создания копий данных     | |||
| 5
    
        vi0 11.07.18✎ 04:13 | 
        (4) это сам алгоритм такой, что требует копий данных и требовательный к памяти     | |||
| 6
    
        vi0 11.07.18✎ 04:14 | 
        1с использую здесь просто как платформу для обучения
 понимаю, что встроенные в платформу сортировки могут быть быстрее | |||
| 7
    
        VladZ 11.07.18✎ 05:55 | 
        (0) Критикую:
 Пиши на одном языке. Выбрал русский - пиши по-русски. Хочешь на буржуйском - пиши на буржуйском. Но не стоит прыгать туда-сюда. Привыкай делать сразу правильно. Разработчики, которые будут сопровождать твой код, проклянут тебя и предадут анафеме. | |||
| 8
    
        VladZ 11.07.18✎ 06:14 | 
        +7 По поводу самой сортировки: программисту 1с это не нужно. Предлагаю не забивать голову ненужным хламом. 
 Шерлок Холмс: ...Ватсон, поймите: человеческий мозг — это пустой чердак, куда можно набить всё, что угодно. Дурак так и делает: тащит туда нужное и ненужное. И наконец наступает момент, когда самую необходимую вещь туда уже не запихнёшь. Или она запрятана так далеко, что ее не достанешь. Я же делаю всё по-другому. В моём чердаке только необходимые мне инструменты. Их много, но они в идеальном порядке и всегда под рукой. А лишнего хлама мне не нужно. | |||
| 9
    
        Emery 11.07.18✎ 06:22 | 
        (0) > сортировка слиянием через рекурсию. У кого какая есть критика, мысли - прошу высказываться
 На эту тему есть статья: «Рабочий алгоритм на С++ внешней сортировки «естественным слиянием» (Natural Merge Sort) с неубывающими и убывающими упорядоченными подпоследовательностями», в которой описан алгоритм имени моего имени :) http://emery-emerald.narod.ru/Cpp/2E1562.html . | |||
| 10
    
        vi0 11.07.18✎ 06:50 | 
        (9) посмотрю     | |||
| 11
    
        vi0 11.07.18✎ 06:50 | 
        (7) критика больше интересна по сути     | |||
| 12
    
        vi0 11.07.18✎ 06:53 | 
        (8) ты считаешь что алгоритмическое мышление одинеснику не нужно?     | |||
| 13
    
        Cyberhawk 11.07.18✎ 07:29 | 
        Латиница в коде 1С - УГ     | |||
| 14
    
        VladZ 11.07.18✎ 07:34 | 
        (12) Любой программист должен "думать алгоритмами".  Я говорил про то, что 1с-нику не нужны сортировки.     | |||
| 15
    
        WhiteDragon93 11.07.18✎ 09:02 | 
        (0) чисто из интереса: что происходит в голове при написании такого кода?
 if n = 1 Тогда return A КонецЕсли; Говнокод или обфускация? | |||
| 16
    
        Мимохожий Однако 11.07.18✎ 09:07 | 
        (15) Может быть,  в пятницу открыть голосовалку? ))     | |||
| 17
    
        vi0 11.07.18✎ 09:19 | 
        Ребят, вяло
 Активнее и больше по теме | |||
| 18
    
        ERWINS 11.07.18✎ 09:26 | 
        Зачем?     | |||
| 19
    
        Митяйский 11.07.18✎ 09:50 | 
        (0) Мердж в рекурсии, написанный на 1с - гвно гвняное, просто кошмар. Я сам это обнаружил где-то с полгода назад, когда так же, как ты заморочился с вузовской теорией.
 Короче вот тебе задачка - напиши две обработки, фильтрующих один и тот же массив, только чтобы одна обработка крутила мердж в рекурсии, а вторая - старый дедовский шеллсорт. И сравни их время работы по отладчику. Можешь еще прикрутить счетчики количества сравнений и перезаписей, если очень уж хочется. | |||
| 20
    
        vi0 11.07.18✎ 10:03 | 
        (19) > Мердж в рекурсии, написанный на 1с - гвно гвняное, просто кошмар
 Соглашусь. Сам это понял, когда писал | |||
| 21
    
        vi0 11.07.18✎ 10:05 | 
        (14) этой темы коснулся только в контексте сложности алгоритма  n*log(n)
 https://habr.com/post/196226/ | |||
| 22
    
        vi0 11.07.18✎ 15:24 | 
        (15) взял код из статьи и дописал русскими конструкциями     | |||
| 23
    
        МихаилМ 11.07.18✎ 21:42 | 
        (22)  "взял код из статьи" - подход школьника. 
 я так делал в 7-8 классе. на 1 курсе работал программистом-стажером в 92 году. сразу сказали -бред: берешь библиотеки и из них используешь. на лекции и семинары про сортировки я не ходил. все это было описано до х86. | |||
| 24
    
        NSSerg 11.07.18✎ 22:07 | 
        (23) Если в рабочем проекте - то да. А если хочешь поднять свой скилл в алгоритмике - то без попыток реализовать в том числе и простейшие методы - уровень не поднимешь.
 В 89-ом году, на сборах на союз (10-11 класс, победители финала чемпионата Ленинграда) в том числе писали и сортировку фон-Нейманом, и другие тривиальные методы в качестве подготовки. Если писал фон-Неймана в 80-ые годы в 7-8 классе - то по тем временам это просто зашеаливающий уровень. | |||
| 25
    
        NSSerg 11.07.18✎ 22:10 | 
        (23) виноват, не так проситал.     | |||
| 26
    
        NSSerg 11.07.18✎ 22:11 | 
        (25) *прочитал :)     | |||
| 27
    
        МихаилМ 11.07.18✎ 22:21 | 
        (24)тут важен подход. как исследовательский так и практический. просто к какому-то моменту у прога должна появляться  библиотека наработок. которая пополняется из библиотеки экспериментов и чужих наработок . 
 соответственно процесс постоянный. конечно "открытия" возможны на всех уровнях и даже школьном. | |||
| 28
    
        NSSerg 11.07.18✎ 22:30 | 
        (27) Смысл изучения алгоритмов ведь не в том чтоб знать их, всё есть в библиотеках, а в том чтоб научиться  придумывать  эффективные алгоритмы в нестандартных ситуациях, и чтоб знать что у задачи есть такие решения. Иначе увидев задачу можно и не понять, что для неё есть готовые алгоритмы. Можно привести пример задачи о рюкзаке. На форуме ветки по ней возникают с завидной периодичностью, и если бы вопрошающие знали хотя бы название задачи, то смогли бы нагуглить всяких алгоритмов. А когда ты знаешь условие, но не знаешь названия - нагуглить что-либо очень проблематично, и начинается изобретение велосипеда.     | |||
| 29
    
        МихаилМ 11.07.18✎ 22:33 | 
        библиотек алгоритмов с исходниками на других языках на порядки больше тк у студентов лабы не на 1с.
 и прочие алгоритмы тоже появляются не на 1с. и адаптация к 1с - спец тема ввиду заточенности 1с для других задач. | |||
| 30
    
        едолюб 11.07.18✎ 22:35 | 
        (28) >На форуме ветки по ней возникают с завидной периодичностью
 пруф? | |||
| 31
    
        NSSerg 11.07.18✎ 22:36 | 
        (30) набери в поиске гугли
 задача о рюкзаке site:forum.mista.ru | |||
| 32
    
        NSSerg 11.07.18✎ 22:36 | ||||
| 33
    
        МихаилМ 11.07.18✎ 22:39 | 
        (28) на  этом форуме про рюкзак кроме Вас и козлова. 
 никто не отвечает. те можно плавно перейти к теме программист 1с - не программист. я хочу сделать акцент на выборе инструмента для прокачки темы алгоритмики в программировании. и бесмысленности портирования в 1с. | |||
| 34
    
        NSSerg 11.07.18✎ 22:50 | 
        (33)  Учитывая что большая часть веток на мисте - это вопросы по решению простых алгоритмических задач, а учитывая что эти ветки иногда висят без решения непозволительно долго, ИМХО для многих 1Сников было бы не лишним поизучать алгоритму.
 Если твой основной инструмент 1С - то почему бы не писать решения простых алгоритмических задач в качестве тренировки на 1С? Хотя, опять-таки ИМХО, лучше выучить еще какой язык, чтоб решать эти задачи на сайтах с автоматической проверкой решения. | |||
| 35
    
        vi0 12.07.18✎ 05:05 | 
        (34) все верно
 Сейчас один из вопросов у меня - найти хороший сборник задач по алгоритмам | |||
| 36
    
        vi0 12.07.18✎ 05:13 | 
        (34) > чтоб решать эти задачи на сайтах с автоматической проверкой решения.
 Какие хорошие сайты есть? | |||
| 37
    
        vi0 12.07.18✎ 09:54 | 
        (33) > и бесмысленности  портирования в 1с
 да хоть на псевдокоде | |||
| 38
    
        Timon1405 12.07.18✎ 10:00 | 
        (36) http://acm.timus.ru/     | |||
| 39
    
        NSSerg 12.07.18✎ 11:25 | 
        (35) codeforces.ru
 На нем все, начиная с начинающих до профи. Регистрируешься, заходишь в Архив, сортируешь задачи по количеству решивших, и начинаешь решать начиная с самых простых. То есть с тех которые решили больше народу. http://codeforces.com/problemset?order=BY_SOLVED_DESC | |||
| 40
    
        NSSerg 12.07.18✎ 11:27 | 
        https://informatics.msk.ru/moodle/
 Вот тут попроще. | |||
| 41
    
        vi0 13.07.18✎ 03:59 | 
        Спасибо всем за рекомендации     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |