Este é um projeto que pretende ser uma implementação de livros de texto de estruturas e algoritmos comuns de dados. Ele fornece implementação de demonstração e testes de unidade.
O código deve ser limpo e simples , e a eficiência não é o principal objetivo. Escreverei a implementação mais eficiente em termos de complexidade da computação ou fornecerei a implementação de diferentes versões.
Exemplo 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);
}
}Se você deseja praticar suas habilidades de codificação, basta fazer o download do projeto e reescrever algoritmos relevantes e executar você mesmo.
Quando você está implementando um algoritmo que requer outros algoritmos ou estruturas de dados, você pode simplesmente usar a implementação existente na biblioteca padrão ou no repositório e se concentrar nas idéias principais, por exemplo:
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);
} No exemplo acima, partition (implementada no repositório) é garantida de retornar dois intervalos não vazios se o comprimento do intervalo de entrada se maior que um, de modo que tenhamos certeza de que as duas chamadas de recursão ocorrerão em dimensões menores.
Você é bem -vindo para contribuir com este projeto por: