/* ヒープ・ソート(改良選択法) */
#include <stdio.h>
#define N 5
int main(void)
{
int a[N + 1];
int n, i, s, p, m, tmp;
printf("%d個の整数を入力して下さい。\n", N);
for (n = 1; n <= N; n++){
printf("No %d : ", n);
scanf("%d", &a[n]);
s = n;
p = s / 2;
while (s >= 2 && a[p] > a[s]){
tmp = a[p];
a[p] = a[s];
a[s] = tmp;
s = p;
p = s / 2;
}
}
n--;
m = n;
while (n > 1){
tmp = a[1];
a[1] = a[n];
a[n] = tmp;
n--;
p = 1;
s = 2 * p;
while (s <= n){
if (s < n && a[s+1] < a[s])
s++;
if (a[p] <= a[s])
break;
tmp = a[p];
a[p] = a[s];
a[s] = tmp;
p = s;
s = 2 * p;
}
}
puts("小さい順に並べ替えると");
for (i = m; i >= 1; i--)
printf("%5d", a[i]);
printf("\n");
return (0);
}
|