您的位置:首页 > 其它

堆排序算法

2011-11-30 11:53 162 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: