#include<iostream>
using namespace std;
#define LEFT(x) (x<<1)
#define RIGHT(x) ((x<<1) + 1)
#define PARENT(x) (x>>1)
int heapSize;
int arraySize;
void HeapFeature(int a[], int i)
{
int largest;
int l = LEFT(i);
int r = RIGHT(i);
if(l <= heapSize && a[l] > a[i])
{
largest = l;
}
else
{
largest = i;
}
if(r <= heapSize && a[r] > a[largest])
{
largest = r;
}
if(largest != i)
{
int temp;
temp = a[i];
a[i] = a[largest];
a[largest] = temp;
HeapFeature(a, largest);
}
}
void CreateMaxHeap(int a[])
{
for(int i = ((arraySize/2)); i > 0; i--)
{
HeapFeature(a, i);
}
}
void HeapSort(int a[])
{
CreateMaxHeap(a);
for(int i = arraySize; i > 0; i--)
{
int temp;
temp = a[1];
a[1] = a[i];
a[i] = temp;
cout << temp << endl;
heapSize -= 1;
HeapFeature(a, 1);
}
}
int main()
{
int n;
cout << "input the number you want to sort:" << endl;
cin >> n;
int *a = new int[n + 1];
a[0] = n;
cout << "input the values that you want to sort:" << endl;
for(int i = 1; i<= n; i++)
{
int x;
cin >> x;
a[i] = x;
}
heapSize = n;
arraySize = n;
HeapSort(a);
system("pause");
return 0;
}
堆排序算法
最新推荐文章于 2012-07-24 17:02:31 发布