Change History (5)

comment:1 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

Корректность - 4/7.

  1. Вывод не должен содержать лишних пробельных символов (у тебя содержит в конце).
  2. Ворнинги компилятора нужно исправить:
    src/main.c: In function ‘main’:
    src/main.c:69:52: warning: passing argument 4 of ‘mergesort’ from incompatible pointer type [-Wincompatible-pointer-types]
       69 |         mergesort(argv, input_size, sizeof(char*), str_comparator);
          |                                                    ^~~~~~~~~~~~~~
          |                                                    |
          |                                                    int (*)(const void **, const void **)
    In file included from src/main.c:1:
    include/mergesort.h:7:22: note: expected ‘int (*)(const void *, const void *)’ but argument is of type ‘int (*)(const void **, const void **)’
        7 |                int (*comparator)(const void*, const void*));
          |                ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    

Ошибка о том, что фунция, которую ты передаешь в качестве аргумента, неверного типа.

  1. Выделяешь память под динамический массив на стеке: int data[input_size]. Для большого массива входных данных стек переполнится.

Стиль - 2.5/3
Замечания:

  1. size_t offset = elements >> 1 -- круто что понимаешь семантику побитового сдвига, но лучше писать elements / 2. Так семантика кода будет понятнее его читателю.
  2. Когда условие в if или while размещается на двух и более строках, нужно выравнить их так, чтобы отступ второй и следующей строк были дальше, чем отступ у блока кода. Например:
    while (left != right_low &&
           right_high != right_low + (offset + (elements % 2)) * element_size) {
      <code>
      ...
    
  3. Когда делаешь приведение типов, лучше не ставить пробел между скобкой и выражением: (char*)array.
  4. Не нужно писать свою реализацию strcmp, можно воспользоваться библиотечной.

comment:2 Changed 3 years ago by Азат Валеев

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:3 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления

Корректность -- 7/7.

Стиль - 2.5/3
Отличный код! Но все же есть несколько замечаний:

  1. Функцию merge лучше вынести в отдельную функцию.
  2. free(NULL) бессмысленная операция
  3. Сдвигать array обратно в конце функции mergesort тоже бессмысленно, это ни на что не влияет.

Бонус - 1/1

comment:4 Changed 3 years ago by Азат Валеев

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:5 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed

11/11.

Одно небольшое замечание:
Освобождать память лучше на том же уровне, где ты её выделяешь.
Выделять буфер в mergesort, а освобождать в merge -- это плохой паттерн.

Note: See TracTickets for help on using tickets.