Example #1
0
void MaxHeapIFY(int a[], int node, int length)
{
	int largest;
	int temp;
	int l = leftChild(node);
	int r = rightChild(node); 

	if(l < length && a[l] > a[node])
	{
		largest = l;
	}
	else
	{
		largest = node;
	}

	if(r < length && a[r] > a[largest])
	{
		largest = r;
	}

	if( node != largest)
	{
		temp = a[node];
		a[node] = a[largest];
		a[largest] = temp;

		MaxHeapIFY(a, largest, length);

	}

}
Example #2
0
//Build max-heap:
void BuildMaxHeap(int a[], int length)
{
	int i;
	for(i = (length - 1)/2; i >= 0; i--)
	{
		MaxHeapIFY(a, i, length);
	}
}
Example #3
0
//Heap sort:
void HeapSort(int a[], int length)
{
	int i;
	int temp;

	BuildMaxHeap(a, length);

	for(i = length - 1; i > 0; i--)
	{
		temp = a[i];
		a[i] = a[0];
		a[0] = temp;

		MaxHeapIFY(a, 0, i);
	}
}
void MaxHeap::MaxHeapIFY(int i)
{
    int l=Left(i);
    int r=Right(i);
    int largest;
    if((l<=this->list.length())&&((r<=this->list.length()))&&
            (this->list.at(l-1)>this->list.at(i-1))&&(this->list.at(l-1)>this->list.at(r-1))){
        this->list.swap(l-1,i-1);
        largest=l;
    }else if((r<=this->list.length())&&(l<=this->list.length())&&
             (this->list.at(r-1)>this->list.at(i-1))&&(this->list.at(r-1)>this->list.at(l-1))){
            this->list.swap(r-1,i-1);
            largest=r;
    }
    else{
        largest=i;
    }
    if(largest!=i&&largest<=this->list.length())
    MaxHeapIFY(largest);


}
void MaxHeap::BuildMaxHeap()
{
    for(int i=this->list.length()/2;i>0;i--){
        MaxHeapIFY(i);
    }
}