堆排序算法 - C++实现
#include <iostream>
using namespace std;
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}
void MAX_Heap(int a[], int pos, int size)
{
int l = 2*pos;
int r = 2*pos + 1;
int largest = 0;
if (l <= size && a[l-1] > a[pos-1]) {
largest = l;
} else {
largest = pos;
}
if (r <= size && a[largest-1] < a[r-1]) {
largest = r;
}
if (largest != pos) {
swap(a[largest-1], a[pos-1]);
MAX_Heap(a, largest, size);
}
}
void Build_MAX_Heap(int a[], int size)
{
for (int i = size/2; i > 0; i--) {
MAX_Heap(a, i, size);
}
}
void HeapSort(int a[], int size)
{
Build_MAX_Heap(a, size);
for (int j = size; j > 1; j--) {
size--;
swap(a[0], a[j-1]);
MAX_Heap(a, 1, size);
}
}
int main()
{
int a[] = {3, 2, 1, 6, 8, 4, 9, 0, 5, 7};
for (int i = 0; i < 10; i++) {
cout << a[i] << " ";
}
cout << endl;
cout << "排序后:" << endl;
HeapSort(a, 10);
for (int i = 0; i < 10; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}