นี่คือโครงการที่มีวัตถุประสงค์เพื่อใช้ในการใช้งานหนังสือของโครงสร้างข้อมูลทั่วไปและอัลกอริทึม มันให้ทั้งการใช้งานตัวอย่างและการทดสอบหน่วย
รหัสมีจุดประสงค์เพื่อ ทำความสะอาด และ เรียบง่าย และประสิทธิภาพไม่ใช่เป้าหมายหลัก ฉันจะเขียนการใช้งานที่มีประสิทธิภาพมากที่สุดในแง่ของความซับซ้อนในการคำนวณหรือให้การใช้งานรุ่นที่แตกต่างกัน
ตัวอย่างรหัส:
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);
}
}หากคุณต้องการฝึกฝนทักษะการเข้ารหัสของคุณเพียงดาวน์โหลดโครงการและเขียนอัลกอริทึมที่เกี่ยวข้องใหม่และเรียกใช้การทดสอบหน่วยด้วยตัวเอง
เมื่อคุณใช้อัลกอริทึมที่ต้องใช้อัลกอริทึมหรือโครงสร้างข้อมูลอื่น ๆ คุณสามารถใช้การใช้งานที่มีอยู่ในไลบรารีมาตรฐานหรือใน repo และมุ่งเน้นไปที่แนวคิดหลักเช่น:
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);
} ในตัวอย่างข้างต้น partition (นำไปใช้ใน repo) รับประกันว่าจะส่งคืนสองช่วงที่ไม่ว่างเปล่าหากความยาวของช่วงอินพุตหากมีขนาดใหญ่กว่าหนึ่งที่เรามั่นใจได้ว่าการเรียกซ้ำทั้งสองต่อไปนี้จะเกิดขึ้นในมิติที่เล็กลง
คุณยินดีที่จะมีส่วนร่วมในโครงการนี้โดย: