Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Aiuto implementazione quicksort
Forum - C/C++ - Aiuto implementazione quicksort

Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 17:16
Sabato, 18/06/2011
Ciao a tutti,
sto imparando un po' di algoritmi ed oggi ho provato ad implementare un quick sort.
(Credo) di aver capito bene come funziona, tuttavia trovo parecchia difficoltà ad implementarlo.
Non capisco cosa sbaglio. Credo sia nella struttura dati...

Codice sorgente - presumibilmente C#

  1. void Distribuisci(int vettore[], int sinistra, int destra){
  2.         if(sinistra < destra){//Controllo che la segmentazione continui nel modo corretto
  3.                 int pivot = (sinistra+destra)/2; //Come pivot scelgo l'elemento centrale
  4.                 int appoggio[n]; //Array di appoggio per salvare momentaneamente
  5.                 int c = 0; //Contatore elementi array appoggio
  6.                 int pos; //posizione finale del pivot
  7.                
  8.                 //Metto in appoggio i numeri più piccoli di vettore[pivot]
  9.                 for(int i=sinistra; i<=destra; i++){
  10.                         if(i!=pivot && vettore[i] < vettore[pivot]){
  11.                                 c++;
  12.                                 appoggio[c]=vettore[i];
  13.                         }
  14.                 }
  15.                 //Metto in appoggio il pivot   
  16.                 c++;
  17.                 pos = c;
  18.                 appoggio[c] = vettore[pivot];
  19.  
  20.                 //Metto in appoggio i numeri più grandi di vettore[pivot]              
  21.                 for(int i=sinistra; i<=destra; i++){
  22.                         if(i!=pivot && vettore[i] >= vettore[pivot]){
  23.                                 c++;
  24.                                 appoggio[c]=vettore[i];
  25.                         }
  26.                 }
  27.                
  28. //Aggiorno situazione
  29.                 for(int i=sinistra; i<=destra; i++){
  30.                         vettore[i] = appoggio[i];
  31.                 }
  32.                
  33. //Ricorsione per ordinare la parte a sinistra e a destra del pivot             
  34.                
  35.                 Distribuisci(vettore,sinistra, pivot-1);
  36.                 Distribuisci(vettore,pivot+1, destra);
  37.         }
  38. }



Cosa sbaglio?

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 14:18
Domenica, 19/06/2011

ma il programma non funziona? non compila? ordina in maniera errata? muore?

Ho sbagliato proprio l'implementazione, fai finta di non aver visto nulla XD . Comunque l'errore era di segmentazione - XBarboX - 19/06/11 14:21
eh, ti consiglio sempre di inserirlo nel post... purtroppo qui nessuno ha ancora il dono della preveggenza :) - HeDo - 19/06/11 15:03
Si in effetti si dimenticano sempre le cose più ovvie - XBarboX - 19/06/11 15:17
PM
Avatar
()
Newbie


Messaggi:
Iscritto:

Up
-5
Down
V
Segnala al moderatore
Postato alle 18:11
Domenica, 19/06/2011
Se è c++, q quela è la funzione principale, non drovrebbe essere int main(...) ?

ma dai... ti prego... - crybot - 19/06/11 18:27
Perché Piero non ha implementato il bottone "calciorota"? - D@vide - 20/06/11 02:12
probabilmente ne detiene i diritti chuck norris... - crybot - 20/06/11 13:03
rotfl - D@vide - 20/06/11 13:24
PM