堆排序

`
#include
#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[234823];
void change(int i)
{
int flag = 0;
while(i2<=m&&flag==0)
{
int t;
if(a[i]<a[i
2])
t = i;
else t = i2;
if(i
2+1<=m&&a[i2+1]<a[t])
t = i
2+1;
if(t!=i)
{
swap(a[i],a[t]);
i = t;
}
else flag =1;
}
}
void dui_sort()
{
while(m>1)
{
swap(a[1],a[m]);
m–;
// change(m);
}
}
int main()
{
cin>>n>>m;
int nn =m;
for(int i=1; i<=m; i++)
{
scanf(“%d”,&a[i]);
}
for(int i=m/2; i>=1; i–)
{
change(i);
}
int x;
for(int i=m+1; i<=n; i++)
{
scanf(“%d”,&x);
// cout<<a[1]<<endl;
if(x>a[1])
{
a[1] = x;
change(1);
// for(int j=m/2;j>=1;j–)
// {
// change(j);
// }
}
}
// for(int i=1; i<=nn; i++)
// {
// printf(“%d”,a[i]);
// if(i!=nn)printf(” “);
// else printf(“\n”);
// }
dui_sort();

for(int i=1; i<=nn; i++)
{
    printf("%d",a[i]);
    if(i!=nn)printf(" ");
    else printf("\n");
}
return 0;

}

/***************************************************
User name: jk160505徐红博
Result: Accepted
Take time: 188ms
Take Memory: 200KB
Submit time: 2017-12-22 19:16:55
****************************************************/
`