RT
#include<iostream>
#define N 8
using namespace std;
void SiftAdjust(int *scr, int low, int high);
void HeapSort(int *scr, int n);
void Print(int *scr, int n);
void Swap(int *scr1, int *scr2);
int main()
{
int scr[N] = {36, 48, 48, 90, 88, 80, 76, 99};
cout<<"原始顺序:";
Print(scr, N);
HeapSort(scr, N);
cout<<endl;
cout<<"排序后顺序:";
Print(scr, N);
cout<<endl;
return 0;
}
void SiftAdjust(int *scr, int low, int high)//大顶堆调整
{
int f,i;
for (f = low, i =2*low+1; i <= high; i = 2*i+1)
{
if (i < high && scr[i] < scr[i+1])
{
i++;
}
if (scr[i] <= scr[f])
{
break;
}
Swap(&scr[i], &scr[f]);
f = i;
}
}
void HeapSort(int *scr, int n)
{
int i;
for (i = (n-2)/2; i >= 0; i--)
{//调整成大顶堆
SiftAdjust(scr, i, n-1);
}
cout<<endl;
cout<<"调整为大顶堆:";
Print(scr, N);
for (i = n-1; i > 0; i--)
{//第i趟排序
Swap(&scr[0], &scr[i]);//将堆顶元素与未经排序的子序列中的最后一个元素交换
//cout<<endl;
// Print(scr, N);
SiftAdjust(scr, 0, i-1);//重新调整为大顶堆
cout<<endl;
cout<<"重新调整为大顶堆:";
Print(scr, N);
}
}
void Swap(int *scr1, int *scr2)
{
*scr1 = *scr1 ^ *scr2;
*scr2 = *scr2 ^ *scr1;
*scr1 = *scr1 ^ *scr2;
}
void Print(int *scr, int n)
{
int i;
for (i = 0; i < n; i++)
{
cout<<scr[i]<<" ";
}
}