예제 #1
0
void HeapInsert(_Node* p) {
	if (heap_sz == myHeap.size())
		myHeap.push_back(p);
	else
		myHeap[heap_sz] = p;
	heap_sz++;

	SiftUp();
}
예제 #2
0
파일: MaxHeap.cpp 프로젝트: valdeski/sdp2.3
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);
}
예제 #3
0
파일: timer.cpp 프로젝트: sanjayui/tinymux
void CTaskHeap::Remake(SCHCMP *pfCompare)
{
    int s_nCurrent = m_nCurrent;
    m_nCurrent = 0;
    while (s_nCurrent--)
    {
        m_nCurrent++;
        SiftUp(m_nCurrent-1, pfCompare);
    }
}
예제 #4
0
파일: timer.cpp 프로젝트: sanjayui/tinymux
void CTaskHeap::Update(int iNode, SCHCMP *pfCompare)
{
    if (iNode < 0 || m_nCurrent <= iNode)
    {
        return;
    }

    SiftDown(iNode, pfCompare);
    SiftUp(iNode, pfCompare);
}
예제 #5
0
파일: ccHeap.cpp 프로젝트: core-code/LibVT
ccHeapNode *ccHeap::Extract(void)
{
ccHeapNode *pResult;

	assert(Size > 0);

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

	return pResult;
}
예제 #6
0
파일: timer.cpp 프로젝트: sanjayui/tinymux
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;
}
예제 #7
0
파일: timer.cpp 프로젝트: sanjayui/tinymux
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;
}
예제 #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;
}
예제 #9
0
파일: ccHeap.cpp 프로젝트: core-code/LibVT
void ccHeap::ExtractInsert(ccHeapNode *pNode)
{
	pHeap[1] = pNode;
	SiftUp();
}
예제 #10
0
 void decrease (size_t id, const ValueType &val) {
     size_t point = id_to_point_[id];
     heap_[point] = val;
     SiftUp(point);
 }
예제 #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);
 }
예제 #12
0
파일: MaxHeap.cpp 프로젝트: valdeski/sdp2.3
void MaxHeap<T>::Add(T value)
{
    arr.push_back(value);
    SiftUp(arr.size()-1);
}