我正在尝试使用三叉树Heapsort对数组进行排序,并且我知道此方法中的条件是问题所在。我不知道如何将其更改为正确的。
在调试时,我看到算法正在覆盖其过去的工作。我有几个if条件具有模数,以便子代数始终正确。三元树的父级最多可以有3个子级,但是如果只有1个或0个,我想要正确的比较数。
private static void sink(int[] a, int k, int size)
{
// runs until the k value can't exist, i.e., no children
while (3*k-1 <= size)
{
// j is the leftmost child of k
// -1 to access left node, another -1 for array access
int j = 3*k-2;
//alternating between trying j or (3*k-1)
if ((j) % 3 == 0)
{
if (j < size && a[j] < a[j+1])
j++;
}
// runs if the parent node k has 3 children
else if((j) %3 == 1)
{
// checking left and middle node
if (j < size && a[j] < a[j+1])
{
j++;
// checking middle and right node
if (a[j] < a[j+1])
j++;
}
// checks left and right node
else if (j < size && a[j] < a[j+2])
j+=2;
}
/*
exchanges child if parent is smaller
*/
if (!(a[k-1] < a[j]))
break;
int temp = a[k-1];
a[k-1] = a[j];
a[j] = temp;
k = j;
}
}
具有大小为7的数组,输出为:
Before Sorting:
[7, 2, 3, 6, 5, 4, 1]
After Sorting:
[2, 4, 3, 1, 5, 6, 7]