Я работаю над заданием для школы.По сути, мы анализируем алгоритмы сортировки и их стоимость на больших наборах чисел.У нас есть лучший случай (в порядке уже), худший случай (обратный порядок) и средний случай (случайный порядок).Тем не менее, почти для всех моих алгоритмов сортировки сортировка в худшем случае занимает меньше времени, чем в среднем.После прочтения это определенно кажется предсказанием ветвлений.Это распознавание паттерна (убывающий порядок) и выполнение кода быстрее, чем это должно быть теоретически (большие обозначения O).
Я провел некоторое исследование по прогнозированию ветвлений, и, хотя, похоже, есть способыоптимизировать это, чтобы быть быстрее, я не могу найти что-нибудь о его отключении полностью.Можно ли использовать флаг G ++?Или команда терминала?
Это пример моего алгоритма сортировки пузырьков:
void bubble(vector<long> &vector) {
for (int i = 0; i < vector.size() - 1; i++){
for (int j = 0; j < vector.size() - i - 1; j++) {
if (vector[j] > vector[j + 1]) {
long tmp = vector[j];
vector[j] = vector[j+1];
vector[j+1] = tmp;
}
}
}
}
Мои тайминги для моего среднего случая почти удваиваются для худшего случая.