下面是代码
/*自主钻研HEAPSORT*/
#include <bits/stdc++.h>
using namespace std;
/* 首先我们要建堆,堆是一个二叉树;
先举一个例子;
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
如何寻找一个节点的父亲呢?;
对了,就是把这个数给除以2;
找子节点也只需要乘2加1或不加;
然后是建堆;
堆要怎么建呢?;
我们先模拟一段数字吧;
549812
好,就用这串字母模拟吧;
现在建堆;
5
4 9
8 1 2
我们首先,最上值是6,于是我们先看3;
2<9,故我们不交换,再看2;
8>1,8>4,更改;
5
8 9
4 1 2
之后就到1了;
9>1;
9
8 5
4 1 2
然后9挪到最后;
2
8 5
4 1 9
9消失,最大--,重复上述;
大概能写出来了;
*/
int a[114514];
void msort(int a[],int s)
{
if (s == 1) return;
else
{
for (int i = s; i > 1; i--)
{
if (a[i] > a[i/2])
swap(a[i/2], a[i]);
}
swap(a[1], a[s]);
for (int i = 1; i <= 9; i++)
cout<<a[i]<<" ";
cout<<endl;
s--;
msort(a, s);
}
}
int main(void)
{
for(int i = 1; i <= 9; i++)
cin>>a[i];
msort(a, 9);
for (int i = 1; i <= 9; i++)
cout<<a[i]<<" ";
return 0;
} /*HERE IS FINALCRACK*/