[code:1]
// ispis poruke i prekid programa
void Fatalno (char *niz) {
printf ("\n %s \n", niz);
exit (1);
}
// udruzivanje LPoz:LijeviKraj i DPoz:DesniKraj
void Merge (tip A [], tip PomPolje [], int LPoz, int DPoz, int DesniKraj) {
int i, LijeviKraj, BrojClanova, PomPoz;
LijeviKraj = DPoz - 1;
PomPoz = LPoz;
BrojClanova = DesniKraj - LPoz + 1;
// glavna pelja
while (LPoz <= LijeviKraj && DPoz <= DesniKraj) {
if (A [LPoz] <= A [DPoz])
PomPolje [PomPoz++] = A [LPoz++];
else
PomPolje [PomPoz++] = A [DPoz++];
}
while (LPoz <= LijeviKraj)
// Kopiraj ostatak prve polovice
PomPolje [PomPoz++] = A [LPoz++];
while (DPoz <= DesniKraj)
// Kopiraj ostatak druge polovice
PomPolje [PomPoz++] = A [DPoz++];
for (i = 0; i < BrojClanova; i++, DesniKraj--)
// Kopiraj PomPolje natrag
A [DesniKraj] = PomPolje [DesniKraj];
}
// MergeSort - rekurzivno sortiranje podpolja
void MSort (tip A [], tip PomPolje[], int lijevo, int desno ) {
int sredina;
if (lijevo < desno) {
sredina = (lijevo + desno) / 2;
MSort (A, PomPolje, lijevo, sredina);
MSort (A, PomPolje, sredina + 1, desno);
Merge (A, PomPolje, lijevo, sredina + 1, desno);
}
}
// MergeSort - sort udruzivanjem
void MergeSort (tip A [], int N) {
tip *PomPolje;
PomPolje = malloc (N * sizeof (tip));
if (PomPolje != NULL) {
MSort (A, PomPolje, 0, N - 1);
free (PomPolje);
} else
Fatalno ("Nema mjesta za PomPolje!");
}
[/code:1]
Kod: |
// ispis poruke i prekid programa
void Fatalno (char *niz) {
printf ("\n %s \n", niz);
exit (1);
}
// udruzivanje LPoz:LijeviKraj i DPoz:DesniKraj
void Merge (tip A [], tip PomPolje [], int LPoz, int DPoz, int DesniKraj) {
int i, LijeviKraj, BrojClanova, PomPoz;
LijeviKraj = DPoz - 1;
PomPoz = LPoz;
BrojClanova = DesniKraj - LPoz + 1;
// glavna pelja
while (LPoz <= LijeviKraj && DPoz <= DesniKraj) {
if (A [LPoz] <= A [DPoz])
PomPolje [PomPoz++] = A [LPoz++];
else
PomPolje [PomPoz++] = A [DPoz++];
}
while (LPoz <= LijeviKraj)
// Kopiraj ostatak prve polovice
PomPolje [PomPoz++] = A [LPoz++];
while (DPoz <= DesniKraj)
// Kopiraj ostatak druge polovice
PomPolje [PomPoz++] = A [DPoz++];
for (i = 0; i < BrojClanova; i++, DesniKraj--)
// Kopiraj PomPolje natrag
A [DesniKraj] = PomPolje [DesniKraj];
}
// MergeSort - rekurzivno sortiranje podpolja
void MSort (tip A [], tip PomPolje[], int lijevo, int desno ) {
int sredina;
if (lijevo < desno) {
sredina = (lijevo + desno) / 2;
MSort (A, PomPolje, lijevo, sredina);
MSort (A, PomPolje, sredina + 1, desno);
Merge (A, PomPolje, lijevo, sredina + 1, desno);
}
}
// MergeSort - sort udruzivanjem
void MergeSort (tip A [], int N) {
tip *PomPolje;
PomPolje = malloc (N * sizeof (tip));
if (PomPolje != NULL) {
MSort (A, PomPolje, 0, N - 1);
free (PomPolje);
} else
Fatalno ("Nema mjesta za PomPolje!");
}
|
_________________
|