[C] Quicksort

alecxio
Buongiorno!

Sto provando a far funzionare l'algoritmo del quicksort ma non riesco a far ordinare l'array. L'unico risultato che ottengo è la stampa dell'array che ho inserito e con sotto le posizioni dei valori.
Il codice è il seguente:

#include<stdio.h>

void quick_sort(int x[], int sx, int dx){
   int i,j,tmp,pivot;
   pivot = x[(sx+dx)/2];
   for(i=sx, j=dx; i<j; i++, j--){
      while(x[i]<pivot){
         i++;}
      while(x[j]>pivot){
         j--;}
   
         if(i<=j){
            tmp=x[i];
            x[i]=x[j];
            x[j]=tmp;
         
         }
         i++;
         j--;
   }
          
}

int main() {
printf("Inserire la lunghezza dell'array:");
int m,i,b;
scanf("%d", &m);
int a[m];
/*inizio ciclo per inserimento dati */
for(i=0;i<m;i++){
printf("inserire il valore n. %d\n", i);
scanf("%d", &a[i]);
}

//per stampare la sequenza che ho immesso sopra//
	for (b=0;b<=(m-1);b++)
	printf("%d ",a[b]);
	printf("\n");
//sequenza stampata ordino l'array//

 quick_sort(a, 0, m+1); //richiamo la funzione
	for(i=0;i<m+1;i++)
	printf("%d ", i+1, a[i]);
}


Non riesco a capire se l'errore sia all'interno del main o nella funzione stessa(o in entrambe :p) .
Grazie in anticipo per l'aiuto.

Risposte
apatriarca
Utilizza il tag code per inserire il testo in modo da postarlo correttamente indentato. Che compilatore stai usando? Che errore ti viene restituito? È un errore a runtime o di compilazione?

alecxio
"apatriarca":
Utilizza il tag code per inserire il testo in modo da postarlo correttamente indentato. Che compilatore stai usando? Che errore ti viene restituito? È un errore a runtime o di compilazione?


Mi sembra che il codice ora lo visualizzi già indentato. Compilo direttamente dall'editor di testo.
Non mi da errore ma non mi visualizza la sequenza ordinata.

se ad esempio creo un array composto da : 9,8,7,6 invece di ordinarli mi segna la loro posizione 1,2,3,4.
non so se sono riuscito a spiegarmi bene.

apatriarca
:wink: Credo che qualche moderatore sia passato e l'abbia fatto per te... Usalo la prossima volta.

In che senso lo compili direttamente dall'editor di testo? Cosa usi? Ci sono diverse righe di codice che usano estensioni non standard del linguaggio...

Il tuo quicksort somiglia incredibilmente a quello postato da un altro utente in questo post: http://www.matematicamente.it/forum/quick-sort-t42521.html A parte l'incremento nel for sono del tutto identici (pure nella formattazione). Esattamente come per l'altro utente manca la ricorsione.

Umby2
Mi sembra lo stesso codice letto qualche topic fa, (vedi più giù)

Non mi è chiaro tutto il codice ma ti chiedo:

in riferimento al codice:
         if(i<=j){
            tmp=x[i];
            x[i]=x[j];
            x[j]=tmp;


non dovrebbe essere ?

         if(x[i]<=x[j]){
            tmp=x[i];
            x[i]=x[j];
            x[j]=tmp;

Umby2
"apatriarca":
:wink: Credo che qualche moderatore sia passato e l'abbia fatto per te... Usalo la prossima volta.

In che senso lo compili direttamente dall'editor di testo? Cosa usi? Ci sono diverse righe di codice che usano estensioni non standard del linguaggio...

Il tuo quicksort somiglia incredibilmente a quello postato da un altro utente in questo post: http://www.matematicamente.it/forum/quick-sort-t42521.html A parte l'incremento nel for sono del tutto identici (pure nella formattazione). Esattamente come per l'altro utente manca la ricorsione.



oops...

ci siamo accavallati...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.