Re: Consiglio per quicksort

Messaggioda ZfreS » 16/07/2018, 19:02

Ah ok, adesso ho capito perchè, m si può implementare un sistema in modo che l'utente inserisca proprio il primo e l'ultimo valore dell'array ma questi vengano poi associati agli indici e l'algoritmo lavora solo con gli indici?
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 689 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: Consiglio per quicksort

Messaggioda vict85 » 16/07/2018, 19:22

olegfresi ha scritto:Ah ok, adesso ho capito perchè, m si può implementare un sistema in modo che l'utente inserisca proprio il primo e l'ultimo valore dell'array ma questi vengano poi associati agli indici e l'algoritmo lavora solo con gli indici?


Come ti ha scritto Super Squirrel, i valori non sono necessariamente univoci, quindi la funzione in sé ha poco senso. L'implementazione di una cosa del genere è piuttosto semplice, ma non te lo mostro perché ritengo che sia una pratica poco sicura (se l'elemento non è presente nell'array cominci a leggere memoria a caso finché il tuo programma non crasha, o peggio). Detto questo, che problema stai cercando di risolvere?
vict85
Moderatore
Moderatore
 
Messaggio: 9332 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: Consiglio per quicksort

Messaggioda ZfreS » 16/07/2018, 19:26

Perfetto, non ci sono altri problemi oltre questo, grazie mille per l'aiuto!
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 690 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: Consiglio per quicksort

Messaggioda ZfreS » 17/07/2018, 16:36

Riprendo un attimo questo thread per un altro dubbio: se chiedo di stampare il pivot dopo averlo calcolato, mi tampa l'array in disordine e non in ordine.Come mai? Il codice è così:
Codice:
void quickSort(int arr[], int inizio, int fine)
{
   int i = inizio, j = fine, tmp;
   int pivot = arr[(inizio + fine) / 2];
       cout << pivot << endl;

   while (i <= j)
   {
      while (arr[i] < pivot)
         i++;           
      while (arr[j] > pivot)
         j--;

         if (i <= j)
         {
         tmp = arr[i];
         arr[i] = arr[j];
         arr[j] = tmp;
         i++;
         j--;
      }
   };

   if (inizio < j)
      quickSort(arr, inizio, j);
   if (i < fine)
      quickSort(arr, i, fine);
}   

[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 692 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: Consiglio per quicksort

Messaggioda Super Squirrel » 17/07/2018, 18:31

Ma ti riferisci ai valori di pivot oppure alla funzione stampa_array() che richiami alla fine nel main?
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 262 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Consiglio per quicksort

Messaggioda ZfreS » 17/07/2018, 18:41

si è la funzione stampaArray che me li stampa disordinati dopo aver chiamato la mergeSort
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 694 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: Consiglio per quicksort

Messaggioda Super Squirrel » 17/07/2018, 20:55

si è la funzione stampaArray che me li stampa disordinati dopo aver chiamato la mergeSort

:?:

Sarò sincero, non capisco cosa intendi... cioè prima di aggiungere quel cout << pivot << endl; nella funzione quickSort() il programma funzionava bene?

In ogni caso a scanso di equivoci, metti tutto in un solo file compilabile e riporta il codice qui sul forum insieme a quello che è l'output del programma e l'output che invece ti aspetteresti.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 263 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Consiglio per quicksort

Messaggioda ZfreS » 17/07/2018, 21:16

Si, prima di mettere il cout funzionava bene, poi no.
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 696 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

Re: Consiglio per quicksort

Messaggioda Super Squirrel » 17/07/2018, 23:06

Super Squirrel ha scritto:In ogni caso a scanso di equivoci, metti tutto in un solo file compilabile e riporta il codice qui sul forum insieme a quello che è l'output del programma e l'output che invece ti aspetteresti.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 264 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Consiglio per quicksort

Messaggioda ZfreS » 18/07/2018, 08:20

Codice:
void quickSort(int arr[], int inizio, int fine)
{
   int i = inizio, j = fine, tmp;
   int pivot = arr[(inizio + fine) / 2];
   //cout << pivot << endl;

   while (i <= j)
   {
      while (arr[i] < pivot)
         i++;           
      while (arr[j] > pivot)
         j--;

         if (i <= j)
         {
         tmp = arr[i];
         arr[i] = arr[j];
         arr[j] = tmp;
         i++;
         j--;
      }
   };

   if (inizio < j)
      quickSort(arr, inizio, j);
   if (i < fine)
      quickSort(arr, i, fine);


int main()
{
   int v[]={ 4, 7, 2, 9, 3, 12 };
   cout << "Ecco l'array disordinato: " << endl;
   stampaArray(v, 6);
   cout << "Ecco l'array ordinato con quick sort: " << endl;
   quickSort(v, 0, 5);
   stampaArray(v, 6);

   system("pause");
   return 0;
}
 
[URL=https://datesnow.life]Authentic Ladies[/URL]
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 697 di 4590
Iscritto il: 22/10/2016, 17:52
Località: Usa

PrecedenteProssimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite