Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C] Quicksort

  1. #1

    [C] Quicksort

    Ragazzi mi servirebbe una mano per capire in che modo passare le variabili alle funzioni in modo che esse vengano effettivamente modificate all'interno del corpo; ho provato con i puntatori, ma ho combinato solo casini. Grazie. Ecco il sorgente:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int partition (int Array[], int p, int r);
    
    void quicksort(int Array[], int p, int r);
    
    void swap (int *b,int *a);
    
    void main()
    
    {
    
    	int k;
    
    	int Array[] = {43,56,0,100,2};
    
    	int p = Array[0];
    
    	int r = Array[4];
    
    	quicksort (Array,p,r);
    
    	for (k=0;k<5;k++)
    		
    		printf("%d\n\n", Array[k]);
    
    
    	return;
    
    }
    
    
    
    
    int partition (int Array[], int p, int r)
    
    {
    
    	int x, i, j;
    	
    	x = Array[p]; 
    	
    	i = p-1; 
    	
    	j = r+1;
    
    	while (i < j) {
    
    		while (Array[j--] > x);
    				
    			while (Array[i++]<x);
    
    				if (i < j)
    
    				{
    					swap (&Array[j],&Array[i]);
    
    				}
    
    			}
    	
    	return(j);
    
    
    }
    
    
    
    void quicksort(int Array[], int p, int r) {
    
       int q;
    
       if (p < r) {
    
    	   q = partition (Array, p, r);
    
    	   quicksort (Array, p, r);
    
    	   quicksort (Array, q+1, r);
    
       }
    
    
       return;
    
    }
    
    
    void swap (int *b,int *a)
    
    {
    	int temp;
    
    	temp=*a; 
    	
    	*a=*b; 
    	
    	*b=temp;
    
    }

  2. #2
    Utente di HTML.it L'avatar di sky_451
    Registrato dal
    Apr 2003
    Messaggi
    194
    che variabili devi modificare jamp?

    p.s. mi rifà internet!!!!
    "There is no dark side of the moon really. Matter of fact it’s all dark."

  3. #3
    E 'na Madonna...
    Praticamente la swap funziona sono sicuro, invece la quick e la partition non modificano p ed r! insomma fanno da matti
    Ma in generale va bene sto listato?

  4. #4
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    se vuoi che le variabili vengano modificate all'interno delle funzioni devi per forza usare i puntatori in C...
    infatti il C utilizza il solo passaggio di valori per valore(cioè passa il valore della variabile e nello stack della funzione viene ricopiato, quindi se la funzione modificherà il valore non modifica quello passato ma quello del suo personale stack) e quello per riferimento si simula appunto passando i puntatori...

    tipo abc(a,b) --- per valore con a,b variabili intere
    abc(&a, &b)--- simula il riferimento

    ...

    [OT]---> bella firma ^EvAmPiReS^.... Stairway to Heaven forever
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  5. #5
    Utente di HTML.it L'avatar di byaur
    Registrato dal
    Aug 2004
    Messaggi
    1,061
    Originariamente inviato da ^EvAmPiReS^
    Ma in generale va bene sto listato?
    non va bene...
    infatti la partition() e quicksort() lavorano sugli indici del vettore invece tu gli passi gli elementi di inizio e di fine...VVoVe: :

    codice:
    int p = Array[0];
    
    int r = Array[4];
    Chi di noi non vorrebbe
    sollevare il velo sotto cui sta nascosto il
    futuro...
    David Hilbert

  6. #6
    Si me l'ha fatto notare anche un mio amico...riprovando a compilare con quella correzione, il programma annulla il main cioè non succede niente a parte "Press any key to continue"...bah in questi casi un bel taglia e si riparte. Grazie comunque. Flower Power

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 © 2024 vBulletin Solutions, Inc. All rights reserved.