Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Rješenje 11. zadatka
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
bojan
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 04. 03. 2006. (19:48:44)
Postovi: (44)16
Spol: muško
Sarma = la pohva - posuda
24 = 25 - 1
Lokacija: Zagreb

PostPostano: 17:54 pon, 27. 11. 2006    Naslov: Rješenje 11. zadatka Citirajte i odgovorite

Dakle, vjerujem da ima i jednostavnijih rješenja, no ja sam riješio ovako pa se nadam da će nekome pomoći...

Koji je princip tj. algoritam funkcije?
1. Uzimamo prvi element u redu
2. Uspoređujemo sve elemente s prvim koji smo uzeli (dakle sve dok ne ispraznimo red). Sve elemente šaljem na stog.
3. Vrati sve elemente osim najmanjeg u red. Varijabla brojac broji koliko jednakih elemenata ima. Ako ima jedan takav element onda samo njega nećemo vratiti, a ako ima više od jednog onda vraćamo sve osim jednog (dakle, ako imamo tri osmice, vraćamo dvije).
4. Stavljamo najmanji element na stog.

Nakon toga sve to ponavljamo dok red ne bude prazan. Kako to osiguravamo? Primijetite da uvijek radimo s jednim elementom manje...

Na kraju sve elemente stoga prebacujemo nazad u red.

[code:1]void kjusort(QUEUE *Q) {
STACK stog;
int brojac, gotovo=0, brojac_elemenata=0;
elementtype x, min;
MAKE_NULL(&stog);

while (!gotovo) {
brojac_elemenata=0;
gotovo=brojac=0;

if (!Q_EMPTY(*Q)) {

// Korak 1. Uzimamo prvi element
min=Q_FRONT(*Q);
// Korak 2: Isprazni Q i usporedi s prvim elementom.
while(!Q_EMPTY(*Q)) {
brojac_elemenata++;
x=Q_FRONT(*Q);
Q_DEQUEUE(Q);
PUSH(x, &stog);
if (x<=min) min=x;
}

// Korak 3: Vrati sve elemente osim najmanjeg u red
while (brojac_elemenata-1>=0) {
brojac_elemenata--;
if (TOP(stog)==min) brojac++;
if (brojac==1 && TOP(stog)==min) POP(&stog);
else {
Q_ENQUEUE(TOP(stog), Q);
POP(&stog);
}
}
// Korak 4: Stavi najmanji element na stog
PUSH(min, &stog);
}
else gotovo=1;
}
// Svi elementi stoga se prebacuju na red
while (!EMPTY(stog)) {
Q_ENQUEUE (TOP(stog), Q);
POP(&stog);
}
}[/code:1]

That's it.
Dakle, vjerujem da ima i jednostavnijih rješenja, no ja sam riješio ovako pa se nadam da će nekome pomoći...

Koji je princip tj. algoritam funkcije?
1. Uzimamo prvi element u redu
2. Uspoređujemo sve elemente s prvim koji smo uzeli (dakle sve dok ne ispraznimo red). Sve elemente šaljem na stog.
3. Vrati sve elemente osim najmanjeg u red. Varijabla brojac broji koliko jednakih elemenata ima. Ako ima jedan takav element onda samo njega nećemo vratiti, a ako ima više od jednog onda vraćamo sve osim jednog (dakle, ako imamo tri osmice, vraćamo dvije).
4. Stavljamo najmanji element na stog.

Nakon toga sve to ponavljamo dok red ne bude prazan. Kako to osiguravamo? Primijetite da uvijek radimo s jednim elementom manje...

Na kraju sve elemente stoga prebacujemo nazad u red.

Kod:
void kjusort(QUEUE *Q) {
     STACK stog;
     int brojac, gotovo=0, brojac_elemenata=0;
     elementtype x, min;
     MAKE_NULL(&stog);
     
     while (!gotovo) {
     brojac_elemenata=0;
     gotovo=brojac=0;
     
     if (!Q_EMPTY(*Q)) {

     // Korak 1. Uzimamo prvi element
        min=Q_FRONT(*Q);
     // Korak 2: Isprazni Q i usporedi s prvim elementom.
        while(!Q_EMPTY(*Q)) {
                    brojac_elemenata++;
                    x=Q_FRONT(*Q);
                    Q_DEQUEUE(Q);
                    PUSH(x, &stog);
                    if (x<=min) min=x;
                    }
       
      // Korak 3: Vrati sve elemente osim najmanjeg u red
        while (brojac_elemenata-1>=0) {
              brojac_elemenata--;
              if (TOP(stog)==min) brojac++;
              if (brojac==1 && TOP(stog)==min) POP(&stog);
              else {
                   Q_ENQUEUE(TOP(stog), Q);
                   POP(&stog);
                }
                }
       // Korak 4: Stavi najmanji element na stog
              PUSH(min, &stog);
              }
        else gotovo=1;
        }
       // Svi elementi stoga se prebacuju na red
     while (!EMPTY(stog)) {
           Q_ENQUEUE (TOP(stog), Q);
           POP(&stog);
           }   
}


That's it.



_________________
"It's hard work. You show up every morning. You work hard every day, you give your best effort. There is no pressure if you prepare yourself." - Kobe Bryant
[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail Posjetite Web stranice MSNM
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan