View Full Version : [C]ordinamento per selezione ricorsivo non funzionante
int b[SIZE] = { 20 , 5 , 3 ,4 , 10 , 2 } ;
int *primo = b ;
int *ultimo = &b[SIZE - 1 ] ;
seleziona ( b , primo , ultimo ) ;
void seleziona ( int a [] , int *i , int *n )
{
int small ;
int j ;
int temp ;
if ( *i < *n )
{
small = *i ;
for ( j = i+1 ; j <= n ;j++ )
if ( a[j] < small )
{
small = j ;
temp = small ;
small = *i ;
*i = temp ;
}
seleziona ( a , i+1 , n ) ;
}
}
il codice è abbastanza snello direi , ma non funziona come dovrebbe , cioè non effettua
nessun ordinamento !
potreste aiutarmi?
grazie
bobbytre
24-01-2011, 20:55
int b[SIZE] = { 20 , 5 , 3 ,4 , 10 , 2 } ;
int *primo = b ;
int *ultimo = &b[SIZE - 1 ] ;
seleziona ( b , primo , ultimo ) ;
void seleziona ( int a [] , int *i , int *n )
{
int small ;
int j ;
int temp ;
if ( *i < *n )
{
small = *i ;
for ( j = i+1 ; j <= n ;j++ )
if ( a[j] < small )
{
small = j ;
temp = small ;
small = *i ;
*i = temp ;
}
seleziona ( a , i+1 , n ) ;
}
}
il codice è abbastanza snello direi , ma non funziona come dovrebbe , cioè non effettua
nessun ordinamento !
potreste aiutarmi?
grazie
Non so se il tuo algoritmo di ordinamento sia stato pensato in modo ragionato e quindi funzionante
quello che salta pero' subito agli occhi in base al codice da ta postato
la condizione
if ( *i < *n )
del tuo esempio
risulta mai verificata ( *i = 20 e *n= 2 cioe 20<2 = FALSO ) quindi la funzione esce direttamente
pero' non credo che anche se entrasse venga effettuato quello che ti aspetti.
Non so se il tuo algoritmo di ordinamento sia stato pensato in modo ragionato e quindi funzionante
quello che salta pero' subito agli occhi in base al codice da ta postato
la condizione
if ( *i < *n )
del tuo esempio
risulta mai verificata ( *i = 20 e *n= 2 cioe 20<2 = FALSO ) quindi la funzione esce direttamente
pero' non credo che anche se entrasse venga effettuato quello che ti aspetti.
void seleziona ( int a [] , int size )
{
int j ;
int i ;
int p ;
int min ;
for ( i = 0 ; i < SIZE - 1 ; i++ )
{
min = a[i] ;
p = i ;
for ( j = i + 1 ; j < SIZE ; j++ )
{
if ( confronta (a [j] , min ) < 0 )
{
min = a[j] ;
p = j ;
}
}
if (p != i )
{
a[p] = a[i] ;
a[i] = min ;
}
}
}
int confronta ( int x , int y )
{
if ( x < y )
return -1 ;
else if (x > y )
return 1 ;
else return 0 ;
}
ciao
in effetti ho pasticciato un po ; non avendo idea da dove cominciare ho
creato una specie di bubble sort fac-simile , con parecchie sbavature
quello che ho postato sopra e il corretto codice della versione iterativa dell'argomento
vediamo se riusciamo a cavarne qualcosa
grazie
bobbytre
25-01-2011, 00:15
io non so di preciso cosa vuoi fare , ma se ti serve un algoritmo di ordinamento implementato in modo ricorsivo puoi utilizzare il quick sort.
io non so di preciso cosa vuoi fare , ma se ti serve un algoritmo di ordinamento implementato in modo ricorsivo puoi utilizzare il quick sort.
il problema diceva di "trasformare" in Ricorsivo l'algoritmo di ordinamento per selezione ...
beh ci penserò ancora un po..
grazie!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.