Dies ist ein Projekt, das eine Texbuch-Implementierung gemeinsamer Datenstrukturen und Algorithmen sein soll. Es bietet sowohl Demo -Implementierung als auch Unit -Tests.
Der Code soll sauber und einfach sein, und Effizienz ist nicht das Hauptziel. Ich werde die effizienteste Implementierung in Bezug auf die Komplexität der Berechnung schreiben oder die Implementierung verschiedener Versionen bereitstellen.
Codebeispiel:
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);
}
}Wenn Sie Ihre Codierungsfähigkeiten üben möchten, laden Sie einfach das Projekt herunter und schreiben Sie relevante Algorithmen neu und führen Sie die Unit -Tests selbst durch.
Wenn Sie einen Algorithmus implementieren, der andere Algorithmen oder Datenstrukturen benötigt, können Sie einfach die vorhandene Implementierung in der Standardbibliothek oder in der Repo verwenden und sich auf die Hauptideen konzentrieren, z. B.:
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);
} Im obigen Beispiel wird partition (im Repo implementiert) garantiert zwei nicht leere Bereiche zurückgeben, wenn die Länge des Eingangsbereichs größer als eine so ist, dass wir sicher sind, dass beide folgenden Rekursionsanrufe bei kleineren Abmessungen auftreten.
Sie sind begrüßt, um zu diesem Projekt beizutragen, von beiden: