Quicksort



  • hallo miteinander,

    kann mir jemand verraten, was an folgendem quicksort falsch ist?

    index=anzahl-1;
    int* quicksort	(int *feld, int index)
    {
    
    	int buffer = 0;
    	int pivot = 0;
    	int *pointer_kl;
    	int *pointer_gr;
    	int versatz = 0;
    
    	if (index > 0)
    	{
    		pivot = feld[index/2];
    		pointer_kl = feld + index;
    		pointer_gr = feld;
    
    		do
    		{
    			while (*pointer_gr<=pivot && pointer_gr != pointer_kl)
    			{
    				pointer_gr++;
    			}
    
    			while (*pointer_kl>=pivot && pointer_kl != pointer_gr)
    			{
    				pointer_kl--;
    			}
    
    			buffer = *pointer_gr;
    			*pointer_gr = *pointer_kl;
    			*pointer_kl = buffer;
    
    		} while (pointer_gr<pointer_kl);
    
    		versatz = pointer_gr - feld;
    
    		if (versatz > (index/2) && feld[versatz] > pivot)
    		{
    			versatz = versatz-1;
    		}
    
    		feld[index/2] = feld[versatz];
    		feld[versatz] = pivot;
    
    		quicksort(feld, (versatz - 1));							//Rekursion
    		quicksort(feld + (versatz + 1), index - (versatz + 1));
    	}
    
    	else
    	{
    		return feld;
    	}
    
    }
    

  • Mod

    Eigentlich ist es eher üblich, dass du uns sagst, was falsch ist und wir dir sagen, wie es richtig ginge.



  • Das geschilderte Problem hat nichts mit C zu tun; stelle deine Frage im passenden Subforum.



  • Habe meinen Fehler nun gefunden, der quicksort an sich funktioniert. Der Fehler liegt in meiner main.

    Was nicht funktioniert:

    fertig=quicksort(zahlen, index);
    
    printf("\nFeldinhalt sortiert:\n");
    
    for (int i = 0; i<anzahl; i++)printf("wert:%d\n", i, fertig[i]);
    

    Was funktioniert:

    quicksort(zahlen, index);
    
    printf("\nFeldinhalt sortiert:\n");
    
    for (int i = 0; i<anzahl; i++)printf("wert:%d\n", i, zahlen[i]);
    

    Wäre aber nett, wenn mir jemand erklären könnte, warum nur die untere
    Variante funktioniert



  • Dann schau mal nach, was und wann du etwas aus quicksort zurück gibst.
    Und wie du deine Funktion aufrufst.


Anmelden zum Antworten