Según Scott Meyers, en su libro Effective STL - elemento 46. Afirmó que std::sort
es aproximadamente un 670% más rápido que std::qsort
debido al hecho de estar en línea. ! He probado a mí mismo, y vi que qsort es más rápido :(¿Alguien podría ayudar a explicar este comportamiento extrañoRendimiento de qsort vs std :: sort?
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <cstdio>
const size_t LARGE_SIZE = 100000;
struct rnd {
int operator()() {
return rand() % LARGE_SIZE;
}
};
int comp(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
int main() {
int ary[LARGE_SIZE];
int ary_copy[LARGE_SIZE];
// generate random data
std::generate(ary, ary + LARGE_SIZE, rnd());
std::copy(ary, ary + LARGE_SIZE, ary_copy);
// get time
std::time_t start = std::clock();
// perform quick sort C using function pointer
std::qsort(ary, LARGE_SIZE, sizeof(int), comp);
std::cout << "C quick-sort time elapsed: " << static_cast<double>(clock() - start)/CLOCKS_PER_SEC << "\n";
// get time again
start = std::clock();
// perform quick sort C++ using function object
std::sort(ary_copy, ary_copy + LARGE_SIZE);
std::cout << "C++ quick-sort time elapsed: " << static_cast<double>(clock() - start)/CLOCKS_PER_SEC << "\n";
}
Este es mi resultado:?
C quick-sort time elapsed: 0.061
C++ quick-sort time elapsed: 0.086
Press any key to continue . . .
actualización
Efectivo STL 3rd Edition (2001)
Capítulo 7 Programación con STL
Artículo 46: Considere los objetos de función en lugar de funciones como algori thm parámetros.
Saludos,
¿Dejó que su compilador optimice? Las compilaciones de depuración/no optimizadas no sacarán el máximo provecho de cosas como la creación de líneas. –
Entender cómo funciona la ordenación rápida, le daría una mejor idea de cómo probarla, en resumen: 1. use una matriz más grande, por ejemplo: 10^6 de tamaño, luego llene la matriz en orden descendente 999999 ... 4, 3,2,1 - esto hará que el género se convierta en O (n^2), haciendo esto demostrará efectivamente por qué los comparadores en línea marcan una gran diferencia en este algoritmo en particular. –
@Zenikoder: No, eso no hará que el género se vuelva cuadrádico. –