Opened 3 years ago
Closed 3 years ago
#109 closed ожидается проверка (задача сдана)
WW_mergesort kozlovceva.mariya
Reported by: | Maria Kozlovtseva (kozlovceva.mariya) | Owned by: | Дмитрий Лапшин (lapshin) |
---|---|---|---|
Component: | WW_mergesort | Version: | |
Keywords: | Cc: |
Description
Ну, работает так себе пока, конечно) но код собирается... во что-то.
Но Вы всё равно скажите, что там не так.
Change History (6)
comment:1 Changed 3 years ago by
Owner: | changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya) |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Version: | 1.0 |
comment:2 Changed 3 years ago by
Owner: | changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin) |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | → 2.0 |
Насчет компараторов: мне кажется, это делает код более читаемым и аккуратным, как, например, те же пустые строчки в коде. И препод по Котлину такой стиль, скорее, одобрял. Я исправила, но я предпочла бы и дальше так писать, если за это не будут снижать баллы за стиль. Как и предпочла бы выделять выражения вида "left + left_size * element_size" в отдельные переменные. Так что напишите, пожалуйста, можно мне так в следующих лабах делать или нет, потому что я привыкла к такому стилю.
Скажите, пожалуйста, сколько за это баллов и можно ли будет после ревью ещё исправить или уже нет.
comment:3 Changed 3 years ago by
Owner: | changed from Дмитрий Лапшин (lapshin) to Maria Kozlovtseva (kozlovceva.mariya) |
---|---|
Type: | ожидается проверка → ожидаются исправления |
Version: | 2.0 |
Я удивлён, что Котлин не рекомендовал писать а-ля
fun compare_strings(a: void *, b: void *) = strcmp(a, b)
Потому что кому нужны однострочные функции, когда можно ещё короче :)
Корректность теперь куда лучше. Снаружи заметная ошибка одна: не до конца соблюдаешь формат вывода.
Массивы на стеке всё ещё актуальны, потому что если дадут слишком много параметров сломаешься.
Ты не проверяешь результаты malloc
хотя бы assert
-ом.
Про потребление памяти и циклы тоже в силе.
Но 6 тут точно есть. Поисправляй ещё, одну посылку до полночи завтра даю точно. У лаб нет версий, не выставляй.
comment:4 Changed 3 years ago by
Owner: | changed from Maria Kozlovtseva (kozlovceva.mariya) to Дмитрий Лапшин (lapshin) |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Формат, массивы и проверку malloc сделала. Алгоритм подумала и исправила.
Там ещё бонусное задание сделано теперь.
comment:6 Changed 3 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Ты зачем-то закостылила крайний случай:
if (argc == 2) { printf("%s\n", ""); } else {
Во-первых, давай писать прилично:
if (argc == 2) { printf("\n"); return; } // продолжаем тут
Но можно же и без него!
Вместо цикла вывода while
я бы написал for
:
for (size_t i = 0; i < elements; ++i) { if (i != 0) printf(" "); printf("%?", element[i]); }
И ещё бы я не стеснялся делать memcpy
на размер 0.
И кроме этих вопросов по стилю на -1 всё прекрасно и бонус есть, так что 10.
Собирается, да. Всё, что не так, не скажу, но как минимум намекну.
Компараторы: не понимаю, зачем переменная, если её сразу
return
.Ты пытаешься передать в
mergesort
массивargv
. Как бы не хотелось, но от этого массив не начинает хранить числа или символы (а вот указатели на строчки действительно хранит, между прочим!). Можно было бы в теории в честь этого сортировать строчки, а в компараторах вспоминать, что же это на самом деле, но я бы не принял)Я накостылял нормальное выделение массива чисел и передачу его в сортировку (у тебя даже в комментариях что-то похожее на правду было, только массивы на стеке не-не-не, это GCC язык расширяет), после этого починил пару проблем с памятью (утечки), и оно заработало хоть как-то (не падает, валгринд не орёт, но и не сортирует; уже ничего).
Ты делаешь на итерации
mergesort
два выделения памяти, причём они живут в момент рекурсии. Это сильно неоптимально, вообще можно одно выделение на итерацию, которое не пересекается с рекурсией, а то и вообще одно на всю сортировку.И ключевое. В циклах сортировки никак не меняются left_elem и right_elem. Собственно, как встали в начале так и стоят. Видимо вот поэтому и не работает (на мой вкус, можно пачку переменных выкинуть и станет более рабочей).
Так что выглядит цивильно, но пока совсем не работает. Чини, время есть.