我试图从维基百科页面了解堆的算法,我试图将图片与算法进行比较,但我似乎无法弄清楚
这张图片来自维基百科页面
为什么要先切换#1和#2,不应该先切换#1和#4?
我正在使用java,但这只是从维基百科复制的代码,我知道一般代码涉及切换
if k = 1 then
output(A)
else
// Generate permutations with kth unaltered
// Initially k == length(A)
generate(k - 1, A)
// Generate permutations for kth swapped with each k-1 initial
for i := 0; i < k-1; i += 1 do
// Swap choice dependent on parity of k (even or odd)
if k is even then
swap(A[i], A[k-1]) // zero-indexed, the kth is at k-1
else
swap(A[0], A[k-1])
end if
generate(k - 1, A)
end for
end if
k
最初是 4 所以它不会先切换 A[0] 和 A[3] 吗?
如果这是一个愚蠢的问题,请提前道歉......