#include<iostream>
using namespace std;
void swap(int a[],int i,int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void maxheap_down(int a[], int i, int size)
{
int max_data = i;
int left_data = 2 * i + 1;
int right_data = 2 * (i + 1);
if (left_data<size&&a[left_data]>a[max_data])
max_data = left_data;
if (right_data<size&&a[right_data]>a[max_data])
max_data = right_data;
if (max_data != i)
{
swap(a, i, max_data);
maxheap_down(a, max_data, size);
}
}
void Hsort(int a[], int n)
{
for (int i = n / 2-1; i >= 0; --i)
{
maxheap_down(a, i, n);
}
for (int i = n-1; i > 0; --i)
{
swap(a, 0, i);
maxheap_down(a, 0, i);
}
}
int main()
{
int a[] = { 2, 5, 1, 9, 4, 7, 2, 8 };
Hsort(a, 8);
for (int i = 0; i < 8; ++i)
cout << a[i] << endl;
return 0;
}
排序算法-堆排序
最新推荐文章于 2024-10-01 22:26:00 发布