三元树堆排序的正确条件

时间:2019-03-23 22:08:35

标签: java heapsort ternary-tree

我正在尝试使用三叉树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]

0 个答案:

没有答案