#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[10]={0,},i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=9;i>=0;i--)
{
//printf("=1=\n");
int child = i;
do{
//printf("=2=\n");
int parent = (child-1)/2;
if(a[parent]<a[child])
swap(a[parent],a[child]);
child = parent;
}while(child != 0);
}
for(i=0;i<10;i++)
printf("= %d ",a[i]);
int k=9;
while(k!=0)
{
printf("==k= %d\n",k);
if(a[0] <= a[k]) break;
swap(a[0],a[k--]);
int parent=0;
int child;
do{
//printf("=2=\n");
int child1 = parent*2+1;
int child2 = parent*2+2;
child = child1;
if(child <= k-1 && a[child2]>a[child1])
child = child2;
if(child <= k-1 && a[parent]<a[child])
swap(a[parent],a[child]);
parent = child;
}while(parent<=k);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
return 0;
}
'정보올림피아드-KOI > 알고리즘 트레이닝' 카테고리의 다른 글
[이코테] 곱하기 혹은 더하기 (0) | 2020.12.14 |
---|---|
[이코테] 1이 될때까지 (0) | 2020.12.14 |
Priority_Queue 사용법 (0) | 2020.04.08 |
2장. 프로그래밍 기법 (2.2 재귀적 알고리즘), Recursion (0) | 2020.03.22 |
2장. 프로그래밍 기법 (2.1 언어적 특성) (0) | 2020.03.22 |