📄 大顶堆排序.cpp
字号:
#include <iostream.h>
#include <iomanip.h>
void sift(int A[],int n,int m) //输出以A[m]为根节点的子树为堆
{
int j,t;
t=A[m];j=2*(m+1)-1;
while(j<=n)
{
if(j<n && A[j]<A[j+1]) //j指示t的左右子树根节点中的大者
j++;
if(t<A[j])
{
A[m]=A[j];
m=j;
j=2*(m+1)-1;
}
else
j=n+1;
}
A[m]=t;
}
void heapsort(int A[],int n)
{
int i,k,temp;
k=n/2;
for(i=k-1;i>=0;i--)
sift(A,n-1,i);
for(i=n-1;i>=1;i--)
{
temp=A[0];A[0]=A[i];A[i]=temp;
sift(A,i-1,0);
}
}
void main()
{
int A[10],n=10;
cout<<"请输入要求排序的无序序列(10个数据):";
for(int i=0;i<n;i++)
cin>>A[i];
cout<<"堆排序"<<endl<<"排序前:";
for(i=0;i<n;i++)
cout<<setw(3)<<A[i];
cout<<endl;
heapsort(A,n);
cout<<"排序后:";
for(i=0;i<n;i++)
cout<<setw(3)<<A[i];
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -