Ciao raga!!
qualcuno mi puo dare una mano????
qualcuno mi sa dire dove sbaglio???
devo riordinare il vettore tramite quicksort ma quando evoco ricorsivamente questa funzione ottengo una ricorsione infinita!!! devo per forza usare la ricorsione e la funzione part serve per trovare la posizione definittiva deglie elemnti del vettore e mi rende il valore chiave...
#include <stdio.h>
#define SIZE 10
int part ( int v[], int inf, int sup);
void scrivi (int v[], int Grd);
void scambia ( int v[], int primo, int secondo);
void Qsort ( int v[], int inf , int sup);
int main () {
int v[SIZE] = { 1,2,7,4,34,8,54,56,6,76};
scrivi(v,SIZE);
printf("\n\n\n");
Qsort(v,0,SIZE-1);
system ( "PAUSE");
return 0 ;
}
int part ( int v[], int inf, int sup){
int i= inf, j = sup, Vc= (inf+sup)/2, temp,x;
printf("Numero cercato %d\n", v[Vc]);
for (;;) {
if ( i >j) break;
// da sinistra
while ( v[i]< v[Vc]) i++; printf(" valore i %d\n", i);
scambia(v, Vc, i);
temp = i;
i = Vc;
Vc=temp; // nuova posizione
printf(" valore vc :%d\n", Vc);
scrivi(v, SIZE);
printf("\n\n");
if ( i >j) break;
while ( v[j]>v[Vc]) j--; printf("valore j :%d\n", j);
scambia(v, Vc, j);
temp = j;
j = Vc;
Vc=temp; // nuova posizione
printf(" valore vc %d\n", Vc);
scrivi(v, SIZE);
if ( j<i) break;
}
return Vc;
}
void scambia ( int v[], int Pprimo, int Psecondo){
int temp = v[Pprimo];
v[Pprimo] = v[Psecondo];
v[Psecondo] = temp;
printf("viviv!");
}
void scrivi (int v[], int Grd){
int i = 0;
for ( i=0; i<Grd; i++)
printf("%d ", v[i]);
}
void Qsort ( int v[], int inf , int sup){
int sentinella = part(v, inf, sup);
printf("il valore sentinella e :%d", sentinella);
if ( sentinella +1 <sup) Qsort( v, sentinella +1, sup);
if ( sentinella - 1>inf) Qsort( v,inf, sentinella-1);
}

Rispondi quotando