Почему int I в первом цикле for в heapsort начинается с (n/2-1)? почему не 0?
Почему int i в первом цикле for в heapsort начинается с (n/2-1)? Почему не 0?
Geeksforgeeks heapsort как
Что я уже пробовал:
Geeksforgeeks
Фейсбук
Переполнение стека
Подумайте об этом.n
- количество элементов в коллекции, подлежащих сортировке.
Так что же это такое (n / 2 - 1)
?
Просто: это середина коллекции и последний узел, который может иметь потомков, используя i = 1 ... n
инклюзивный, а не 0 ... n - 1
включительно для индексов. Все узлы из n / 2 + 1
к n
несколько листьев.
Алгоритмы кучи, как правило, используют 1 ... n
нотация, потому что она делает расчет индексов дочерних узлов более чистым. При использовании этой нотации дочерние элементы узла x
в 2x
и 2x + 1
, и родитель из x
в x / 2
. Если вы используете 0 ... (n - 1)
затем дети узла x
в 2x + 1
и 2x + 2
, и родитель узла x
в (x - 1) / 2
.
5.