Triedenie haldou
Program EXE
#include <stdio.h>
#include <conio.h>
#define N 9 /* počet prvkov vstupnej postupnosti */
/* inicializácia poľa - prvok s indexom 0 neberieme do úvahy - pre zjednodušenie */
int A[] = {0, 44, 55, 12, 42, 94, 18, 6, 67, 23};
-------------------------------------------------------------------------------------
void vymena(int i, int j)
{
int pom = a[i];
a[i] = a[j];
a[j] =pom;
}
-------------------------------------------------------------------------------------
void vypis()
{
for (int i = 1; i <= N; i++ ) printf("%2d ", a[i]);
printf("\n");
}
-------------------------------------------------------------------------------------
/* spustí prvok s indexom i na správne miesto v úseku s indexami i..t */
void spusti(int i, int t) {
int j, k;
j = 2*i; k = 2*i + 1;
if (j <= t) {
if (a[i] >= a[j]) j = i;
if (k <= t)
if (a[k] > a[j]) j = k;
if (i != j) {
vymena(i, j);
spusti(j, t);
}
}
}
-------------------------------------------------------------------------------------
void main() /* hlavný program */
{
int i, m;
clrscr();
printf("Vstupna postupnost: "); vypis();
/* vytvorenie haldy */
for (i = (N/2); i >= 1; i-- ) spusti(i, N);
printf("\nHalda: "); vypis();
/* triedenie */
for (m = N; m >= 2; m-- ) {
vymena(1, m); /* výmena A[1] a A[m] */
spusti(1, m - 1); /* obnovenie haldy */
}
printf("\nUtriedena postupnost: "); vypis();
}
|