[ B0goljub @ 29.10.2009. 07:59 ] @
Imam ovaj kod koji radi i koji sam pokusavao da prepravim da bih sortirao svoj niz. Ali mi nikako ne uspeva. Radim sa Visual Studiom 6.0 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); } 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); } |