//@lx time:2010-09-08 P130
//Maintaining the heap property
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
template <class T>
inline void PRINT_ELEMENTS(const T& col1, const char* optcstr = "")
{
typename T::const_iterator pos;
cout << optcstr;
for(pos = col1.begin(); pos != col1.end(); ++pos)
{
cout << *pos << ' ';
}
cout << endl;
}
int LEFT(int i)
{
return 2*i;
}
int RIGHT(int i)
{
return 2 * i + 1;
}
int PARENT(int i)
{
return i / 2;
}
void exchange(int& a, int& b)
{
int temp = 0;
temp = a;
a = b;
b = temp;
}
template <class T>
void MAX_HEAPIFY(vector<T>& A, int i)
{
int l = LEFT(i);
int r = RIGHT(i);
static int largest;
if(l <= A.size() && A[l-1] > A[i-1])
{
largest = l;
}
else
{
largest = i;
}
if(r <= A.size() && A[r-1] > A[largest])
{
largest = r;
}
if(largest != i)
{
exchange(A[i-1], A[largest-1]);
PRINT_ELEMENTS(A, "2 is:");
MAX_HEAPIFY(A, largest);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> A;
A.push_back(16);
A.push_back(4);
A.push_back(10);
A.push_back(14);
A.push_back(7);
A.push_back(9);
A.push_back(3);
A.push_back(2);
A.push_back(8);
A.push_back(1);
PRINT_ELEMENTS(A, "1 is:");
MAX_HEAPIFY(A, 2);
return 0;
}
Main the heap property
最新推荐文章于 2021-10-04 23:03:42 发布