#include <stdio h=""> #include <iostream> #define maxsize 100 using namespace std; int heap[maxsize]; void keep_heapify(int heap[],int n,int r)//r是根节点元素 {//调整堆,如果子节点大于父节点,则交换(都大与最大交换) int temp = 0; int lchild = 2*r; int rchild = 2*r+1; int largest = r; if(lchild<n heap="" lchild="">heap[r]) { largest=lchild; } if(rchild<n heap="" rchild="">heap[largest]) { largest=rchild; } if(largest!=r) { temp=heap[r]; heap[r]=heap[largest]; heap[largest]=temp; keep_heapify(heap,n,largest); } } void heapSort(int heap[],int n)//堆排序 { int i,j,num; int temp; num=n; for(j=n/2;j>1;j--) { keep_heapify(heap,n,j); } for(i=n;i>1;i--)//将堆的顶记录与最后一个记录交换 { num--; temp=heap[1]; heap[1]=heap[i]; heap[i]=temp; keep_heapify(heap,num+1,1);//num+1是因为第一遍循环时就减掉了一次num } } void Output(int heap[],int n)//显示堆 { int i; for(i=1;i<=n;i++) { cout<<heap[i]<<endl; } } int main() { int i; int n=0; cout<<"请输入队中元素的个数:"; cin>>n; cout<<endl; cout<<"请输入堆中元素的数值:"; for(i=1;i<=n;i++) cin>>heap[i]; heapSort(heap,n); cout<<"堆排序之后的顺序:"; Output(heap,n); return 0; } </n></n></iostream></stdio>