#include<iostream>
#include<cstdio>
using namespace std;
void HeapAdjust(int *a,int start,int end)
{
int temp=a[start];
for(int i=2*start+1;i<=end;i=2*i+1)
{
if(i<end&&a[i]<a[i+1]) i++;
if(a[i]>temp)
{
a[start]=a[i];
start=i;
}
else break;
}
a[start]=temp;
}
void Heap_Sort(int *a,int len)
{
for(int i=(len-1-1)/2;i>=0;i--)
{
//第一次建树
HeapAdjust(a,i,len-1);
}
//将第一个与最后一个调换,然后adjust
int tmp;
//需要完成n-1次数
for(int i=0;i<len-1;i++)
{
tmp=a[0];
a[0]=a[len-1-i];//未调整的第一个 倒序排放
a[len-i-1]=tmp;//存储此时大根堆的第一个
//重新调整剩余的元素
HeapAdjust(a,0,len-1-1-i);
}
}
int main()
{
int a[8]={70,50,30,20,10,80,40,60};
Heap_Sort(a,8);
cout<<"最终堆排序的结果:";
for(int i=0;i<=7;i++) cout<<a[i]<<" ";
cout<<endl;
}
堆排序算法实现
于 2024-08-09 15:48:19 首次发布