Цей доказ є доведенням за допомогою індукції і йде так:
P (n) - твердження, що "Quicksort правильно сортує кожен вхідний масив довжиною n".
Базовий регістр: кожен вхідний масив довжиною 1 вже відсортований (утримується P (1))
Індуктивний крок: fix n => 2. Зафіксуйте вхідний масив довжиною n.
Необхідно показати: якщо P (k) справедливо для всіх k <n, то P (n) також має місце
Потім він малює масив A, розділений навколо деякого зведеного p. Отже, він малює p і називає частину масиву, яка є <p, як 1-ю частину, а частина, яка> p, - другу частину. Довжина частини 1 = k1, а довжина частини 2 - k2. За підтвердженням правильності підпрограми Partition (доведено раніше), шарнір p повертається у правильне положення.
Індуктивна гіпотеза: 1-я, 2-я частини правильно сортуються рекурсивними дзвінками. (Використовуючи P (K1), P (k2))
Отже: після рекурсивних дзвінків весь масив правильно сортується.
QED
Моя плутанина : у мене багато проблем, коли я точно бачу, як це доводить її правильність. Отже, ми припускаємо, що P (k) дійсно виконується для всіх натуральних чисел k <n.
Більшість доказів індукції, які я бачив до цього часу, мають щось на кшталт: Доведіть базовий випадок і покажіть, що P (n) => P (n + 1). Зазвичай вони також включали якусь алгебраїчну маніпуляцію. Цей доказ здається зовсім іншим, і я не розумію, як застосувати до нього концепцію Індукції. Я можу дещо пояснити, що ключовим є правильність підпрограми Partition. Отож є міркування щодо його правильності наступним чином: Ми знаємо, що кожен рекурсивний виклик розділить масив навколо стрижня. Потім цей шарнір буде знаходитись у належному положенні. Тоді кожний підмасив буде додатково розподілений навколо шарніра, і цей шарнір буде потім у своєму правильному положенні. Це продовжується і продовжується до тих пір, поки ви не отримаєте підмножину довжиною 1, яка тривіально сортується.
Але тоді ми не припускаємо, що P (k) виконується для всіх k <n .... ми насправді ВИКАЗУЄМО це (оскільки підпрограма Partition завжди розміщує один елемент у правильному положенні.) Чи не вважаємо ми, що P (k) має значення для всіх k