|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Sep 2006
Messaggi: 201
|
domanda su quicksort :)
Ciao a tutti,
questo è un misto tra codice e pseudo codice... static void qs(int[] a, int inf, int sup) { if(lunghezza di a[inf..sup] <= 3) isort(a, inf, sup); // cioè ordina a[inf..sup] con un algoritmo elementare else { int pivot = a[inf]; int i = inf; int j = sup; do { if(a[i] < pivot) i++; else if(a[j] > pivot) j--; else { scambia a[i] con a[j]; i++; j--; } } while(i <= j); qs(a, inf, j); qs(a, i, sup); } } Se nell'algoritmo precedente si sostituiscono i confronti a[i]<pivot e a[j]>pivot rispettivamente con a[i]<= pivot e a[j]>= pivot l'algoritmo non è più corretto. Mi sapreste dire il perchè ?? io proprio nn capisco il motivo... Vi ringrazio in anticipo per l'aiuto. Ciao ciao
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2006
Messaggi: 201
|
sup ?
nessuno mi saprebbe aiutare ? ![]()
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
E' gia' almeno la terza volta che vediamo questo codice, pari pari.
Al che viene il dubbio che sia un testo di un problema ufficiale. Le cui soluzioni sono vietate. Se io volessi la soluzione e non ci fosse nessuno a cui chiederla, proverei a compilarlo e a debuggarlo con un array da ordinare di prova, e cercherei quindi di capire perche' in un caso funziona e in un altro no.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Sep 2006
Messaggi: 201
|
..ah no no..nn è il mio caso ! Questa è solo una domanda di approfondimento che è presente sulle slide del mio prof..nn c'entra nessun problema ufficiale.
Ero solo curioso di sapere il perchè aggiungendo un semplice "=" il tutto poteva non funzionare...visto che sulle slide non è spiegato e io non ho capito il perchè. Quindi, nel caso qualcuno sapesse il motivo e sarebbe così gentile da spiegarmelo gliene sarei grato. Grazie ancora. Ciao ciao P.S. ...se vuoi ti passo le slide.. ![]()
__________________
![]() ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: May 2003
Città: Milano
Messaggi: 2894
|
posto che ho guardato due minuti fa cosa fosse il quicksort quindi potrebbe essermi sfuggito qualcosa, ma non è semplicemente che non funziona con gli uguali perchè supereresti il pivot nella tua scansione in quel caso? cioè tu scansioni da sinistra per trovare elementi più grandi e da destra per trovarne di più piccoli rispetto al pivot, quando li trovi li scambi. se però con la i finisci a destra del pivot o con la j finisci a sinistra, finiresti per scambiare elementi che invece sono già a posto.
ciao
__________________
P4 2.8 NorthwoodC - 2x256 vitesta ddr500 + 1GB Kingston ddr400 - P4C800-Deluxe - SAPPHIRE Radeon X1950pro 512MB AGP - Samsung 931BW Macbook Alu |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:21.