Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Merge sort, problem sa nizom

[es] :: C/C++ programiranje :: C/C++ za početnike :: Merge sort, problem sa nizom

[ Pregleda: 2560 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

B0goljub

Član broj: 237713
Poruke: 2
147.91.202.*



Profil

icon Merge sort, problem sa nizom29.10.2009. u 07:59 - pre 176 meseci
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);


}
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: Merge sort, problem sa nizom29.10.2009. u 09:32 - pre 176 meseci
Brojevi moraju da budu jedinstveni, a u datom nizu dva puta imaš 34. Pretpostavljam da ni originalni kod ne bi radio kad bi mu zadao iste brojeve.
 
Odgovor na temu

B0goljub

Član broj: 237713
Poruke: 2
147.91.202.*



Profil

icon Re: Merge sort, problem sa nizom30.10.2009. u 09:01 - pre 176 meseci
Hvala na odgovoru. U pravu si, kada izbacim broj koji se ponavlja radi ok.
Da li neko zna da li merge sort moze da se koristi i za niz brojeva koji nisu jedinstveni?
 
Odgovor na temu

unisoft
Uzice

Član broj: 124050
Poruke: 346
93.86.233.*



+1 Profil

icon Re: Merge sort, problem sa nizom24.11.2009. u 12:29 - pre 175 meseci
U brate kakav ti je ovo kode za sortiranje brojeva , ti imas buraz 100.. redova koda a program za sortiranje brojeva u opadajucem i rastucem redosledu NIZA ili brojeva koji nisu niz se pise MAX 20 !!! redova koda .... u tvom slucaju da bi bolje razumeo kod i izlaz programa malo cu ga vizuelno doterat pa ce bitni za neki red veci od 20i...

Ja razumem programiranje ali ovaj tvoj kod je :( ??? za doktorat ... Evo ti moj kod pa vidi kako se tvoj program moze napisati na jedan veoma lak ZA POCETNIKE NACIN.


ovo je kod za sortiranje niza u rastucem redosledu.Ako izmenis samo jednu stvar u kodu program ce raditi suprotno.

Code:

#include <stdio.h>
main()
{
    int i, j, n, temp;

    printf("Unesite velicinu vaseg niza: ");
    scanf("%d",&n);
    printf("\n");

    int x[n];

    for (i = 1; i <= n; i++) {
        printf("\t Clan niza X[%d]= ", i);
        scanf("%d", &x[i]);
    }

    printf("\n");

    for (i = 1; i <= n; i++)  
        for (j = 1; j <= n; j++) 
            if ( x[i] < x[j]) {
                temp = x[i];
                x[i] = x[j];
                x[j] = temp;
            }

    printf("Clanovi sortiranog niza su: \n \n ");

    for (i = 1 ; i <= n; i++)  
        printf("\t Clna niza X[%d]= %d\n", i, x[i]);
    printf("\n");
}
    

jedna napomena program ne podrzava brojeve sa pokretnim zarezom u tom slucaju stavi FLOAT
[b] na isti nacin se radi za visedimenzionalni niz .[/b]


Kao sto mozes videti napisao sam ga u 17 redova . Kada se iz koda ukloni 5 redova koji nisu potrebni,stavljeni samo zbog tebe da bi bolje razumeo 2 zagrade se stave iza ; i ukloni se ENTER prazna mesta

Ovo je medju programerima NAJPOZNATI nacin za sortiranje brojeva.Tz metod mehurica bubbles

:) pa sta kazes za moj kod !!! koji je laksi za razumevanje.Program napisan za oko 1min.
 
Odgovor na temu

Picsel
Beograd

Član broj: 39817
Poruke: 440
95.180.74.*



+7 Profil

icon Re: Merge sort, problem sa nizom26.11.2009. u 09:03 - pre 175 meseci
Citat:
unisoft::) pa sta kazes za moj kod !!! koji je laksi za razumevanje.Program napisan za oko 1min.


Na ovoj temi je rec o merge sortu, a ne o bubble sortu. Razlika je ogromna.

A sto se tice merge sorta, moze da se koristi i za nizove koji nemaju sve clanove jedinstvene. Na netu sigurno ima negde kod, ako vec pseudokod i opis, sa recimo wikipedije, nije dovoljan.
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Merge sort, problem sa nizom

[ Pregleda: 2560 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.