Quick sort

di il
3 risposte

Quick sort

Salve ragazzi il mio prof ha dato come esercizio quello di ordinare una struttura usando il quick sort l'unico problema è che non ho capito bene come devo fare per richiamare il quick sort ha detto che è una funzione di sistema ma non so bene che parametri vuole e come la si dichiara qualcuno può aiutami??

3 Risposte

  • Re: Quick sort

    No quicksort è una funzione di ordinamento ricorsiva, non una chiamata di sisteme. Esse può ordinare array o liste a seconda di come è implementata.
    Se devi riordinare un array di interi questa è la funzione che devi usare:
    
    void swap(int *a, int *b){
    	int temp;
    	temp = *a;
    	*a = *b;
    	*b = temp;
    }
    
    int partition(int vettore[],int begin,int end){
    	int pivot, l, r;
    	pivot = vettore[begin]; 
    	l = begin+1; 
    	r = end; 
    	while(l <= r){
    		while(vettore[r] > pivot) r = r-1;
    		while((vettore[l] <= pivot)&&(l <= r)) l = l+1;
    		if(l < r){
    			swap(&vettore[l],&vettore[r]);
    			l++; (*compl)++;
    			r--; (*compl)++;
    		}
    	}
    	swap(&vettore[begin],&vettore[r]); 
    	return r;
    }
    
    void quicksort(int vettore[],int begin,int end){
    	int q;
    	if(begin < end){
    		q = partition(vettore,begin,end); 
    		quicksort(vettore,begin,q-1); 
    		quicksort(vettore,q+1,end); 
    	}
    }
    


    Quicksort oltre a richiamare se stessa richiama anche una funzione di partition che divide l'array in due parti ricorsivamente. In questo modo arriverà ad avere array di sole 2 celle che scambierà richiamando la funzione swap nel caso in cui la prima cella abbia un valore superiore alla seconda.
    Per richiama quicksort dovrai passare come parametri:
    -int vettore[], cioè il vettore da ordinare;
    -int begin, cioè la prima cella dell'array che è = 0;
    -int end, cioè la fine dell'array-1 (se dichiare int vettore[n] begin = n-1).
  • Re: Quick sort

    Ma tu l'hai interamente scritta tu il mio prof invece ha detto che ci basta solamente che gli specifichiamo come si ordinano 2 cose e poi farà tutto lui senza dover scrivere più nulla bahh xdxdxd qst informatici di 1 tempo!!
  • Re: Quick sort

    La funzione da chiamare si trova nella stdlib.h e si chiama qsort. Il suo prototipo è questo:
    void qsort (void *array, size_t count, size_t size, int ( * compare ) ( const void *, const void * ))
    La funzione qsort ordina l'array array. l'Array contiene count elementi, ognuno dei quali è di dimensioni size.
    La funzione compare è quella che fa la magia e la devi scrivere tu.
    A seconda della struttura che hai devi scrivere la funzione compare che deve restituire un intero < 0 se il primo argomento è minore del secondo, = 0 se i due argomenti sono uguali e > 0 se il primo argomento è maggiore del secondo.
    Dimenticavo, il nome della funzione compare lo puoi scegliere tu, il compilatore non si formalizza:)

    Ah, gli informatici di una volta.. Che forza!
Devi accedere o registrarti per scrivere nel forum
3 risposte