У меня никогда не было особой необходимости в написании больших количеств формального псевдокода, но возникла такая необходимость, поэтому я решил выбрать некоторые стандарты, чтобы обеспечить согласованность кода.
С этой целью я взял несколько видеофильмов об iTunes iTunes, среди прочего 6.046J / 18.410J Введение в алгоритмы (SMA 5503) .
В самом первом лекционном видео лектор пишет на доске Insertion Sort и пишет:
Insertion-Sort(A, N) // Sorts A[1..n]
for j ← 2 to n
do key ← A[j]
i ← j-1
while i > 0 and A[i] > key
do A[i+1] ← A[i]
i ← i-1
A[i+1] ← key
Итак, мои вопросы:
- Почему
i ← j-1
когда A[i+1] = key
? То есть, почему ←
в некоторых случаях и =
в других? Обратите внимание, что в приведенном выше коде ←
используется и для последнего, но в раздаточных материалах, доступных в Интернете, используется =
, это просто опечатка? (Я так полагаю)
- Более важно, почему
do key ← A[j]
когда i ← j-1
? Что такого особенного, что для этого требуется команда do
и отступ?
Другими словами, почему приведенный выше псевдокод не написан так (с моими основными моментами):
Insertion-Sort(A, N) // Sorts A[1..n]
for j ← 2 to n
key ← A[j] <-- lost the do here
i ← j-1 <-- no indentation
while i > 0 and A[i] > key
A[i+1] ← A[i] <-- lost the do here
i ← i-1 <-- no indentation
A[i+1] ← key
Последний вопрос: есть ли у кого-нибудь стандарт кода для псевдокода, пригодный где-нибудь? Моя главная цель - последовательность, поэтому мне нужно «научить» получателей только один раз.