#include <iostream>
#include <vector>
#include<algorithm>
using namespace std;
void Max_Heapkey(int a[],int i,int length)
{
int largest=i;
int left =2*i;//i的左结点序列号
int right =2*i+1;//i的右结点序列号
if(i<=length/2)
{
if (left<=length&&a[left]>a[largest])
{
largest = left;
}
if(right<=length&&a[right]>a[largest])
{
largest=right;
}
if (largest != i)
{
swap(a[i],a[largest]);
Max_Heapkey(a,largest,length);
}
}
}
void Build_Max_heap(int a[],int length)//建立堆
{
for(int i=length/2;i>=1;i--)
{
Max_Heapkey(a,i,length);
}
}
void HeapSort(int a[],int length)//堆排序
{
int i;
Build_Max_heap(a,length);
for(i=length;i>=1;i--)
{
swap(a[1],a[i]);
Max_Heapkey(a,1,i-1);
}
}
int main()
{
int a[100];
int length;
cout<<"Please Enter the num of numbers:"<<endl;
cin>>length;
cout<<"Please Enter Some numbers:"<<endl;
for(int i=1;i<=length;i++)
{
cin>>a[i];
}
HeapSort(a,length);
cout<<"The final :";
for(int i=1;i<=length;i++)
{
cout<<a[i]<<' ';
}
}
堆排序
最新推荐文章于 2023-09-21 13:21:58 发布