(С++) Добавить случайности быстрой сортировки на равных элементов


Я использую следующий код для сортировки элементов в std.вектор

struct element {
    int order;
    int someValue;
};

int comp( element a, element b ) {
    if (a.order < b.order)
        return true;
    return (rand() % 2) == 0;
}

vector.quickSort(comp);

Является ли этот код правильным, если я пытаюсь добавить случайность на элементы, которые имеют то же самое порядок значение

1 2

1 ответ:

Является ли этот код правильным.

Вы действительно должны написать тест с некоторыми данными, чтобы проверить это.


Если бы вы написали тест, вы бы увидели что-то неправильное и знали, почему, если мы посмотрим на

if (a.order < b.order)
    return true;
return (rand() % 2) == 0;

Вы можете видеть, что случай a.order > b.order отсутствует, поэтому он будет неправильно работать для этого случая, мы можем исправить это, сделав это вместо этого, который фокусируется на исключительном случае вместо этого и оставляет два других случая их поведению по умолчанию (проверка порядок):

if (a.order == b.order)
    return (rand() % 2) == 0;
else
    return a.order < b.order;