หลักฐานนี้เป็นหลักฐานโดยการเหนี่ยวนำและไปดังนี้:
P (n) เป็นการยืนยันว่า "Quicksort จัดเรียงอินพุตอาร์เรย์ที่มีความยาว n ได้อย่างถูกต้อง"
เคสพื้นฐาน: อินพุตอาร์เรย์ทุกตัวที่มีความยาว 1 เรียงแล้ว (P (1) ถือ)
ขั้นตอนอุปนัย: แก้ไข n => 2. แก้ไขอาร์เรย์อินพุตที่มีความยาว n
ต้องแสดง: ถ้า P (k) ถือสำหรับ k <n ทั้งหมดดังนั้น P (n) ก็ถือเช่นกัน
จากนั้นเขาก็ดึงอาร์เรย์ A ที่แบ่งพาร์ติชันไว้รอบ pivot p ดังนั้นเขาจึงวาด p และเรียกส่วนของอาร์เรย์ที่ <p เป็นส่วนที่ 1 และส่วนที่> p คือส่วนที่สอง ความยาวของส่วนที่ 1 = k1 และความยาวของส่วนที่ 2 คือ k2 โดยการพิสูจน์ความถูกต้องของรูทีนย่อย Partition (พิสูจน์แล้วก่อนหน้านี้) pivot p จะหมุนขึ้นในตำแหน่งที่ถูกต้อง
โดยสมมติฐานอุปนัย: 1, ส่วนที่ 2 ได้รับการจัดเรียงอย่างถูกต้องโดยการโทรซ้ำ (ใช้ P (K1), P (k2))
ดังนั้น: หลังจากเรียกซ้ำ, อาร์เรย์ทั้งหมดจะถูกจัดเรียงอย่างถูกต้อง
QED
ความสับสนของฉัน : ฉันมีปัญหามากมายที่เห็นว่าวิธีนี้พิสูจน์ความถูกต้องของมัน ดังนั้นเราจึงสันนิษฐานว่า P (k) มีค่าเป็นจำนวนธรรมชาติทั้งหมด k <n
หลักฐานการเหนี่ยวนำส่วนใหญ่ที่ฉันได้เห็นไปเป็นเช่น: พิสูจน์กรณีฐานและแสดงให้เห็นว่า P (n) => P (n + 1) พวกเขามักจะเกี่ยวข้องกับการเรียงพีชคณิต หลักฐานนี้ดูแตกต่างกันมากและฉันไม่เข้าใจวิธีการใช้แนวคิดของการเหนี่ยวนำกับมัน ฉันสามารถเหตุผลได้ว่าความถูกต้องของรูทีนย่อย Partition เป็นกุญแจสำคัญ ดังนั้นเหตุผลสำหรับความถูกต้องของมันเป็นดังนี้: เรารู้ว่าการเรียกซ้ำแต่ละครั้งก็จะแบ่งอาร์เรย์รอบเดือย เดือยนี้จะอยู่ในตำแหน่งที่ถูกต้อง จากนั้นแต่ละ subarray จะถูกแบ่งพาร์ติชันเพิ่มเติมรอบ ๆ เดือยและเดือยนั้นจะอยู่ในตำแหน่งที่ถูกต้อง สิ่งนี้จะดำเนินต่อไปเรื่อย ๆ จนกว่าคุณจะได้รับ subarray ที่มีความยาว 1 ซึ่งเรียงลำดับเล็กน้อย
แต่แล้วเราก็ไม่ได้สมมติว่า P (k) ถือเอาไว้สำหรับ k <n ทั้งหมด .... เรากำลังแสดงให้เห็นว่ามันเป็นจริง (เนื่องจากรูทีนย่อยพาร์ติชันจะวางองค์ประกอบหนึ่งในตำแหน่งที่ถูกต้องเสมอ) เราไม่ได้สมมติว่า P (k) ถือสำหรับ k ทั้งหมด