Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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?


The old lie: Dulce et decorum est pro patria mori
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
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


Ingegnere Informatico
https://ldlagency.it
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