Este es un proyecto destinado a ser una implementación de libros de texto de estructuras y algoritmos de datos comunes. Proporciona implementación de demostración y pruebas unitarias.
El código está destinado a ser limpio y simple , y la eficiencia no es el objetivo principal. Escribiré la implementación más eficiente en términos de complejidad de cálculo o proporcionaré la implementación de diferentes versiones.
Ejemplo de código:
template < class Iter >
void linearInsert (Iter first, Iter last)
{
auto insertionPoint = std::upper_bound (first, last, *last);
std::rotate (insertionPoint, last, last + 1 );
}
template < class Iter >
void insertionSort (Iter first, Iter last)
{
// [begin, p) sorted
// [p, end) to be processed
for ( auto p = first; p != last; ++p) {
linearInsert (first, p);
}
}Si desea practicar sus habilidades de codificación, simplemente descargue el proyecto y reescribe algoritmos relevantes y ejecute pruebas unitarias usted mismo.
Cuando está implementando un algoritmo que requiere otros algoritmos o estructuras de datos, simplemente puede usar la implementación existente en la biblioteca estándar o en el repositorio y concentrarse en las ideas principales, por ejemplo:
template < class Iter >
void quickSort (Iter first, Iter last)
{
if (last - first <= 1 ) {
return ;
}
auto partitionPoint = partition (first, last);
quickSort (first, partitionPoint);
quickSort (partitionPoint, last);
} En el ejemplo anterior, partition (implementada en el repositorio) garantiza que devuelva dos rangos no vacíos si la longitud del rango de entrada si es mayor de uno de tales que estamos seguros de que ambas llamadas de recursión se producirán en dimensiones más pequeñas.
Te dan la bienvenida a contribuir a este proyecto por cualquiera de los dos: