Opened 5 years ago
Closed 5 years ago
#281 closed ожидается проверка (задача сдана)
WW #4
Reported by: | Шелухина Екатерина | Owned by: | Артур Гулецкий (huletski) |
---|---|---|---|
Component: | WW_mergesort | Version: | 2.0 |
Keywords: | Cc: |
Description
Change History (3)
comment:1 Changed 5 years ago by
Type: | ожидается проверка → ожидаются исправления |
---|
comment:2 Changed 5 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|---|
Version: | 1.0 → 2.0 |
comment:3 Changed 5 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Тесты проходят -> +10.
Комментарии по коду
include/mergesort.h
- включение заголовочных файлов перед include guard'ом: технически ошибки в этом нет (препроцессор потратит на обработку исходников чуть больше времени), но принято включать файлы _внутри_ guard'a;
- подключение лишних заголовочных файлов (нужен только
stddef.h
) -> потенциально немного увеличивается время компиляции; my_memcpy
"экспортировать" не нужно, так как по смыслу она является внутренней частью реализации mergesort. Альтернатива - вынести реализацию в отдельный файл (e.g. memory_utils.h).
Если исходников много, то недочеты 1 и 2 могут заметно увеличить время сборки.
src/main.c
- элементы сортируемого массива хранятся в VLA: не так критично, как было в mergesort, но лучше бы хранились в динамической памяти (т.к. теоретически могут занимать неоправданно много места на стеке).
src/mergesort.c
- лишние include'ы:
string.h
,stdio.h
; - оформление кода: пробельные символы после каждой строки в
my_memcpy
; отсутствие пустой строки междуmerge
иmemcpy
, в то время как присутствуют избыточные пустые строки 39 и 40; разный стиль объявления переменных: где-то после базового типа используется один пробел (8), где-то два (14) и т.п.. На это нужно обращать внимание, так как такая "неоднородность" увеличивает время на чтение и понимание кода; merge
можно было бы написать одним циклом, выглядело бы компактнее;mergesort
использует два вызова функции malloc, можно было бы обойтись одним (один блок, достаточный для хранения обоих "подмассивов",right
указывал бы в середину выделенной памяти). Это бы уменьшило нагрузку на менеджер памяти;- при выделении памяти отсутствует проверка на то, что память выделилась успешно (в противном случае программа, например, могла бы завершаться с ошибкой, используя
assert
).
--
Итог: 10. Обратите внимания на замечания, при проверке следующих решений за такие же могут сниматься баллы.
Note: See
TracTickets for help on using
tickets.
Решение собирается (+0.01), но зависает при попытке запуска на данных из условия:
Замечания после просмотра кода по диагонали: