#include <iostream>
using namespace std;
#define MAXSIZE 9
typedef struct
{
int r[MAXSIZE+1];
int length;
}SqList;
//堆排序 1.构建堆(构建特殊的完全二叉树)
void HeapAdjust(SqList *L,int s ,int m)
{
int j,temp;
temp=L->r[s];
for(j=2*s;j<=m;j*=2) //子结点
{
if(j<m&&L->r[j]<L->r[j+1]) //比较两结点的大小
++j; //获取较大顶点的下标
if(temp>=L->r[j]) //比较父结点与子结点的大小
break;
L->r[s]=L->r[j];
s=j; //更新下标
}
L->r[s]=temp;
}
void HeapSort(SqList *L)
{
int i;
for (i=L->length/2;i>0;i--)
HeapAdjust(L,i,L->length);
for (i=L->length;i>1;i--)
{
swap(L,1,i);
HeapAdjust(L,1,i-1);
}
}
int main()
{
SqList* L = ( SqList* ) malloc( sizeof( SqList ) );//分配内存,初始化
L ->length=9;
for(int i=1;i<=L->length;i++)
{
cin>>L ->r[i];
}
for(int i=1;i<=L->length;i++)
{
cout<<L ->r[i];
}
HeapSort(L);
for(int i=1;i<=L->length;i++)
{
cout<<L ->r[i];
}
}
Python:
L3=[0,50,10,90,30,70,40,80,60,20]
def HeapAdjust(L3,s,m):
temp=L3[s]
j=2*s
while j<=m: #key point
if j<m and L3[j]<L3[j+1]:
j=j+1
if temp>=L3[j]:
break
L3[s]=L3[j]
s=j
j=2*j
L3[s]=temp
def HeapSort(L3):
for i in range((len(L3)-1)//2,0,-1): #key point
HeapAdjust(L3,i,len(L3)-1)
for i in range (len(L3)-1,1,-1):
swap(L3,1,i)
HeapAdjust(L3,1,i-1)
if __name__ == "__main__":
HeapSort(L3)
print(L3)