Exemplo n.º 1
0
void HeapInsert(_Node* p) {
	if (heap_sz == myHeap.size())
		myHeap.push_back(p);
	else
		myHeap[heap_sz] = p;
	heap_sz++;

	SiftUp();
}
Exemplo n.º 2
0
void MaxHeap<T>::SiftUp(unsigned n)
{
    unsigned p = Parent(n);
    if(n==0 || arr[n]<=arr[p])
        return;

    std::swap(arr[n],arr[p]);
    SiftUp(p);
}
Exemplo n.º 3
0
void CTaskHeap::Remake(SCHCMP *pfCompare)
{
    int s_nCurrent = m_nCurrent;
    m_nCurrent = 0;
    while (s_nCurrent--)
    {
        m_nCurrent++;
        SiftUp(m_nCurrent-1, pfCompare);
    }
}
Exemplo n.º 4
0
void CTaskHeap::Update(int iNode, SCHCMP *pfCompare)
{
    if (iNode < 0 || m_nCurrent <= iNode)
    {
        return;
    }

    SiftDown(iNode, pfCompare);
    SiftUp(iNode, pfCompare);
}
Exemplo n.º 5
0
ccHeapNode *ccHeap::Extract(void)
{
ccHeapNode *pResult;

	assert(Size > 0);

	pResult = pHeap[1];
	pHeap[1] = pHeap[Size];
	Size--;
	SiftUp();

	return pResult;
}
Exemplo n.º 6
0
PTASK_RECORD CTaskHeap::Remove(int iNode, SCHCMP *pfCompare)
{
    if (iNode < 0 || m_nCurrent <= iNode) return NULL;

    PTASK_RECORD pTask = m_pHeap[iNode];

    m_nCurrent--;
    m_pHeap[iNode] = m_pHeap[m_nCurrent];
    SiftDown(iNode, pfCompare);
    SiftUp(iNode, pfCompare);

    return pTask;
}
Exemplo n.º 7
0
bool CTaskHeap::Insert(PTASK_RECORD pTask, SCHCMP *pfCompare)
{
    if (m_nCurrent == m_nAllocated)
    {
        if (!Grow())
        {
            return false;
        }
    }
    pTask->m_iVisitedMark = m_iVisitedMark-1;

    m_pHeap[m_nCurrent] = pTask;
    m_nCurrent++;
    SiftUp(m_nCurrent-1, pfCompare);
    return true;
}
Exemplo n.º 8
0
int main()
{
    int i, j, x, y;
    n = N;
    scanf("%d", &i);
    x = H[i]; y = H[n];
    n = n - 1;
    if(i == n + 1)
    {
        for(j = 1; j <= n; ++j)
            printf("%d ", H[j]);
    }
    else
    {
        H[i] = y;
        if(y >= x)
            SiftUp(H, i);
        else
            SiftDown(H, i);
        for(j = 1; j <= n; ++j)
            printf("%d ", H[j]);
    }
    return 0;
}
Exemplo n.º 9
0
void ccHeap::ExtractInsert(ccHeapNode *pNode)
{
	pHeap[1] = pNode;
	SiftUp();
}
Exemplo n.º 10
0
 void decrease (size_t id, const ValueType &val) {
     size_t point = id_to_point_[id];
     heap_[point] = val;
     SiftUp(point);
 }
Exemplo n.º 11
0
 void insert(const ValueType &value, size_t id) {
     heap_.push_back(value);
     point_to_id_.push_back(id);
     id_to_point_[id] = point_to_id_.size() - 1;
     SiftUp(heap_.size() - 1);
 }
Exemplo n.º 12
0
void MaxHeap<T>::Add(T value)
{
    arr.push_back(value);
    SiftUp(arr.size()-1);
}