HeapSort
2012-06-28 00:13
330 查看
//heapsort
#include <iostream>
#include <stdio.h>
using namespace std;
int length, heapsize;
void MAX_heapify(int p, int *heap)
{
int q = p<<1;
int largest = p;
while(q <= heapsize)
{
if(heap[q] > heap[p])
largest = q;
if(q+1 <= heapsize && heap[q+1] > heap[largest])
largest = q+1;
if(largest != p)
{
int t;
t = heap[largest];
heap[largest] = heap[p];
heap[p] = t;
p = largest;
q = p<<1;
}
else break;
}
}
void build_MAX_heap(int *heap)
{
int mid = heapsize / 2;
for(int i = mid; i>= 1; i--) //not leaf nodes
MAX_heapify(i,heap);
}
void heapsort(int *heap)
{
build_MAX_heap(heap);
for(int i = heapsize; i>= 2; i--)
{
int t;
t = heap[1];
heap[1] = heap[heapsize];
heap[heapsize] = t;
heapsize--;
MAX_heapify(1, heap);
}
}
int main()
{
while(scanf("%d", &length)!=EOF)
{
heapsize = length;
int i;
int heap[1000] = {0};
for(i = 1; i <= length; i++)
cin>>heap[i];
heapsort(heap);
for(i = 1; i <= length; i++)
cout<<heap[i]<<" ";
cout<<endl;
}
return 0;
}
#include <iostream>
#include <stdio.h>
using namespace std;
int length, heapsize;
void MAX_heapify(int p, int *heap)
{
int q = p<<1;
int largest = p;
while(q <= heapsize)
{
if(heap[q] > heap[p])
largest = q;
if(q+1 <= heapsize && heap[q+1] > heap[largest])
largest = q+1;
if(largest != p)
{
int t;
t = heap[largest];
heap[largest] = heap[p];
heap[p] = t;
p = largest;
q = p<<1;
}
else break;
}
}
void build_MAX_heap(int *heap)
{
int mid = heapsize / 2;
for(int i = mid; i>= 1; i--) //not leaf nodes
MAX_heapify(i,heap);
}
void heapsort(int *heap)
{
build_MAX_heap(heap);
for(int i = heapsize; i>= 2; i--)
{
int t;
t = heap[1];
heap[1] = heap[heapsize];
heap[heapsize] = t;
heapsize--;
MAX_heapify(1, heap);
}
}
int main()
{
while(scanf("%d", &length)!=EOF)
{
heapsize = length;
int i;
int heap[1000] = {0};
for(i = 1; i <= length; i++)
cin>>heap[i];
heapsort(heap);
for(i = 1; i <= length; i++)
cout<<heap[i]<<" ";
cout<<endl;
}
return 0;
}