Razlika je samo u main funkciji, ostalo nisam dirao. Hvala unapred za pomoc.
Pocetni kod koji radi:
Code:
# include <stdlib.h>
# define MAXEL 1000
int merges (int an, int ae[]) {
int i1, i2, j1, j2, k, k1, l;
int be[MAXEL];
int *ce, *de;
l = 0;
while (1) {
switch (l) {
case 0:
ce = ae; de = be;
break;
case 1:
ce = be; de = ae;
break;
}
j2 = -1;
k = 1;
k1 = 0;
while (1) {
i1 = i2 = j2+1;
while ((i2 < an-1) && (ce[i2] < ce[i2+1])) i2++;
if ((j1 = i2+1) == an) {
if (k==1) {
if (l)
for (i1 = 0; i1 < an; i1++) ae[i1] = be[i1];
} else
for (;i1 <= i2; i1++) de[i1] = ce[i1];
break;
}
k++;
j2 = j1;
while ((j2 < an-1) && (ce[j2] < ce[j2+1])) j2++;
while ((j1<=j2) && (i1<=i2))
if (ce[i1] < ce[j1]) de[k1++] = ce[i1++];
else de[k1++] = ce[j1++];
while (i1 <= i2) de[k1++] = ce[i1++];
while (j1 <= j2) de[k1++] = ce[j1++];
if (j2 == an-1) break;
k++;
}
if (k==1) break;
if ((k==2) && !l) {
for (i1 = 0; i1 < an; i1++) ae[i1] = be[i1];
break;
}
l = 1-l;
}
}
int prn_niz (int an, int ae[]) {
int i;
for (i = 0; i < an; i++) printf ("%d\n", ae[i]);
}
int main () {
int an, i;
int ae[MAXEL];
printf ("n = "); scanf ("%d", &an);
for (i = 0; i < an; i++) ae[i] = rand();
merges (an, ae);
prn_niz (an, ae);
}
# include <stdlib.h>
# define MAXEL 1000
int merges (int an, int ae[]) {
int i1, i2, j1, j2, k, k1, l;
int be[MAXEL];
int *ce, *de;
l = 0;
while (1) {
switch (l) {
case 0:
ce = ae; de = be;
break;
case 1:
ce = be; de = ae;
break;
}
j2 = -1;
k = 1;
k1 = 0;
while (1) {
i1 = i2 = j2+1;
while ((i2 < an-1) && (ce[i2] < ce[i2+1])) i2++;
if ((j1 = i2+1) == an) {
if (k==1) {
if (l)
for (i1 = 0; i1 < an; i1++) ae[i1] = be[i1];
} else
for (;i1 <= i2; i1++) de[i1] = ce[i1];
break;
}
k++;
j2 = j1;
while ((j2 < an-1) && (ce[j2] < ce[j2+1])) j2++;
while ((j1<=j2) && (i1<=i2))
if (ce[i1] < ce[j1]) de[k1++] = ce[i1++];
else de[k1++] = ce[j1++];
while (i1 <= i2) de[k1++] = ce[i1++];
while (j1 <= j2) de[k1++] = ce[j1++];
if (j2 == an-1) break;
k++;
}
if (k==1) break;
if ((k==2) && !l) {
for (i1 = 0; i1 < an; i1++) ae[i1] = be[i1];
break;
}
l = 1-l;
}
}
int prn_niz (int an, int ae[]) {
int i;
for (i = 0; i < an; i++) printf ("%d\n", ae[i]);
}
int main () {
int an, i;
int ae[MAXEL];
printf ("n = "); scanf ("%d", &an);
for (i = 0; i < an; i++) ae[i] = rand();
merges (an, ae);
prn_niz (an, ae);
}
Kod koji iz nekog razloga ne radi:
Code:
# include <stdlib.h>
# include <stdio.h>
# define MAXEL 20
int merges (int an, int ae[]) {
int i1, i2, j1, j2, k, k1, l;
int be[MAXEL];
int *ce, *de;
l = 0;
while (1) {
switch (l) {
case 0:
ce = ae; de = be;
break;
case 1:
ce = be; de = ae;
break;
}
j2 = -1;
k = 1;
k1 = 0;
while (1) {
i1 = i2 = j2+1;
while ((i2 < an-1) && (ce[i2] < ce[i2+1])) i2++;
if ((j1 = i2+1) == an) {
if (k==1) {
if (l)
for (i1 = 0; i1 < an; i1++) ae[i1] = be[i1];
} else
for (;i1 <= i2; i1++) de[i1] = ce[i1];
break;
}
k++;
j2 = j1;
while ((j2 < an-1) && (ce[j2] < ce[j2+1])) j2++;
while ((j1<=j2) && (i1<=i2))
if (ce[i1] < ce[j1]) de[k1++] = ce[i1++];
else de[k1++] = ce[j1++];
while (i1 <= i2) de[k1++] = ce[i1++];
while (j1 <= j2) de[k1++] = ce[j1++];
if (j2 == an-1) break;
k++;
}
if (k==1) break;
if ((k==2) && !l) {
for (i1 = 0; i1 < an; i1++) ae[i1] = be[i1];
break;
}
l = 1-l;
}
return 1;
}
int prn_niz (int an, int ae[]) {
int i;
for (i = 0; i < an; i++) printf ("%d\n", ae[i]);
return 1;
}
int main () {
int an, i;
int ae[MAXEL];
int glupiniz[14]={34, 545,45,34,5343,6,94,3,2,1,0,-34,-54,-644};
an =14;
merges (an, glupiniz);
prn_niz (an, glupiniz);
}
# include <stdlib.h>
# include <stdio.h>
# define MAXEL 20
int merges (int an, int ae[]) {
int i1, i2, j1, j2, k, k1, l;
int be[MAXEL];
int *ce, *de;
l = 0;
while (1) {
switch (l) {
case 0:
ce = ae; de = be;
break;
case 1:
ce = be; de = ae;
break;
}
j2 = -1;
k = 1;
k1 = 0;
while (1) {
i1 = i2 = j2+1;
while ((i2 < an-1) && (ce[i2] < ce[i2+1])) i2++;
if ((j1 = i2+1) == an) {
if (k==1) {
if (l)
for (i1 = 0; i1 < an; i1++) ae[i1] = be[i1];
} else
for (;i1 <= i2; i1++) de[i1] = ce[i1];
break;
}
k++;
j2 = j1;
while ((j2 < an-1) && (ce[j2] < ce[j2+1])) j2++;
while ((j1<=j2) && (i1<=i2))
if (ce[i1] < ce[j1]) de[k1++] = ce[i1++];
else de[k1++] = ce[j1++];
while (i1 <= i2) de[k1++] = ce[i1++];
while (j1 <= j2) de[k1++] = ce[j1++];
if (j2 == an-1) break;
k++;
}
if (k==1) break;
if ((k==2) && !l) {
for (i1 = 0; i1 < an; i1++) ae[i1] = be[i1];
break;
}
l = 1-l;
}
return 1;
}
int prn_niz (int an, int ae[]) {
int i;
for (i = 0; i < an; i++) printf ("%d\n", ae[i]);
return 1;
}
int main () {
int an, i;
int ae[MAXEL];
int glupiniz[14]={34, 545,45,34,5343,6,94,3,2,1,0,-34,-54,-644};
an =14;
merges (an, glupiniz);
prn_niz (an, glupiniz);
}