Код: Выделить всё
template
void bubble_sort_1(std::vector& arr)
{
bool swapped;
for (std::size_t i = 0; i < arr.size(); ++i) {
swapped = false;
for (std::size_t j = 0; j + 1 < arr.size() - i; ++j) {
if (compare(arr[j], arr[j + 1]) > 0) {
std::swap(arr[j], arr[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
};
template
void bubble_sort_2(std::vector& arr, int (*compare)(T, T))
{
bool swapped;
for (std::size_t i = 0; i < arr.size(); ++i) {
swapped = false;
for (std::size_t j = 0; j + 1 < arr.size() - i; ++j) {
if (compare(arr[j], arr[j + 1]) > 0) {
std::swap(arr[j], arr[j + 1]);
swapped = true;
}
}
if (!swapped) break;
}
};
Я довольно запутался. Желаемое поведение не сложно, но я не получаю то, что я должен сделать, чтобы достичь его. Если поведение Bubble_sort_1 , как я ожидаю, лучшее, что я получил, - это «это дело компилятора», что не очень приятно для меня. За исключением размера кода, я обеспокоен скоростью кода. Я действительно не вижу, как удаление накладных расходов кода, которое будет выполнено в любом случае, могло бы ухудшить скорость.
Подробнее здесь: https://stackoverflow.com/questions/797 ... t-to-do-so
Мобильная версия