Exemple #1
0
        void SinkNode(Node node)
        {
            while (true)
            {
                int left  = node.Index * 2 + 1;
                int right = node.Index * 2 + 2;
                int newInd;
                if (right < count)
                {
                    newInd = cells[left].CompareTo(cells[right]) > 0 ? left:right;
                }
                else if (left < count)
                {
                    newInd = left;
                }
                else
                {
                    return;
                }

                if (node.CompareTo(cells[newInd]) < 0)
                {
                    Node temp = cells[node.Index];
                    cells[node.Index]       = cells[newInd];
                    cells[node.Index].Index = node.Index;
                    cells[newInd]           = temp;
                    cells[newInd].Index     = newInd;
                }
                else
                {
                    return;
                }
            }
        }
Exemple #2
0
        void FloatNode(Node node)
        {
            int newInd = (node.Index - 1) / 2;

            while (node.Index > 0)
            {
                Node parent = cells[newInd];
                if (parent.CompareTo(node) < 0)
                {
                    Node temp = cells[node.Index];
                    cells[node.Index]       = cells[newInd];
                    cells[node.Index].Index = node.Index;
                    cells[newInd]           = temp;
                    cells[newInd].Index     = newInd;
                    newInd = (node.Index - 1) / 2;
                }
                else
                {
                    {
                        break;
                    }
                }
            }
        }