Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    142

    [c++] quicksort di un vettore di caratteri

    Ragazzi devo fare il quicksort per ordinare caratteri ecco il codice:
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <time.h>
    
    using namespace std;
    
    typedef char tvettchar[100];
    
    void acquisiscivett(tvettchar &vc, int &N){
         int I;
         do{
           cout<<"Inserisci quanti caratteri inserire: ";
           cin>>N;
         }while((N<1)||(N>100));
         for(I=0;I<N;I++){
           cout<<"Inserisci il "<<I+1<<char(248)<<" carattere: ";
           cin>>vc[I];
         }
    }
    
    void visualizzavett(tvettchar vc, int N){
         int I;
         for(I=0;I<N;I++){
           cout<<I+1<<char(248)<<" carattere: "<<vc[I]<<endl;
         }                              
    }
    
    void scambia(char &A, char &B){
         char aiuto = A;
         A = B;
         B = aiuto;
    }
    
    void quicksort(tvettchar &vc, int inf, int sup){
      int I,J;
      char centro;
      
      srand(time(NULL));
      
      if (inf<sup) {
        // Partenza: i parte dal primo elemento del vettore, j dall'ultimo
        I = inf; J = sup;
      
        // Il centro è l'elemento medio del vettore
        centro = rand() % ;// cosa devo mettere qui per il random di un carattere presente nel vettore??
     
        do{
          // Finché l'elemento generico i-esimo a sinistra del centro
          // è minore del centro, incrementa i
          if(vc[I] < vc[centro]) 
            I++;
          else
          // Finché l'elemento generico j-esimo a destra del centro
          // è maggiore del centro, decrementa j
          if(vc[J] > vc[centro]) 
            J--;
          else
          // Altrimenti, scambia tra loro l'elemento i-esimo e quello j-esimo
          if(I <= J) {
            scambia(vc[I],vc[J]);
            I++, J--;
          }
        } while (I <= J);  // Cicla finché i e j non si incontrano
     
        // Richiama il quick sort sul primo sottovettore
        quicksort(vc,inf,J);
     
        // Richiama il quick sort sul secondo sottovettore
        quicksort(vc,I,sup);
      }
    }
    
    int main()
    {
        tvettchar vc;
        int N;
        
        acquisiscivett(vc,N);
        quicksort(vc,0,N-1);
        visualizzavett(vc,N);
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    cosa metto per randomizzare il carattere??

  2. #2
    Te l'ho già spiegato nell'altra discussione, anche se in realtà puoi tranquillamente mettere semplicemente
    codice:
    centro = rand();
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    142
    Ho provato in tutti e due i modi ma mi va in crash il programma e non capisco il perchè

  4. #4
    Be', ma se centro dev'essere l'indice dell'elemento pivot allora lo devi limitare alla lunghezza del vettore.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.