(С++) Добавить случайности быстрой сортировки на равных элементов
Я использую следующий код для сортировки элементов в 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 ответ:
Является ли этот код правильным.
Вы действительно должны написать тест с некоторыми данными, чтобы проверить это.
Если бы вы написали тест, вы бы увидели что-то неправильное и знали, почему, если мы посмотрим на
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;