Quicksort mit zwei Sortierkriterien

Slarti

Grünschnabel
Hallo,

ich habe folgendes Problem: ein zweidimensionales array enthält in der ersten Spalte (zahl[x][0]) die Zehnerpotenz einer zweistelligen Zahl und die zweite (zahl[x][1]) die Einerpotenz der zahl.
Jetzt soll diese Zahl mit quicksort sortiert werden (also zuerst nach den Zehnerpotenzen und dann nach den Einern.
Folgender Algorithmus tuts nicht, allerdings weiß ich nicht wieso
Kann mir jemand helfen?

Code:
void quicksort (int [][] zahl, int left, int right) {
	    
	    int i, j, k, speicher;
	    
	    i = left;
	    j = right;
	    k = zahl[(right + left) / 2][0];  //pivot: mittleres Elt. der 10er Potenzen
	    
	    while (i <= j){
	        while (zahl[i][0] < k) i++;
	        while (zahl[j][0] > k) j--;
	        if (i<=j){
		    if(zahl[i][0] == zahl[j][0]){
			if (zahl[i][1] > zahl[j][1]){
			    #speicher = zahl[i][0]; zahl[i][0] = zahl[j][0]; zahl[j][0] = speicher;
			    speicher = zahl[i][1]; zahl[i][1] = zahl[j][1]; zahl[j][1] = speicher;
			}                          
		    }
		    else{
	            	speicher = zahl[i][0]; zahl[i][0] = zahl[j][0]; zahl[j][0] = speicher;
			speicher = zahl[i][1]; zahl[i][1] = zahl[j][1]; zahl[j][1] = speicher;
		    }
	            i++; j--;
	        }
	    }

	       if (left<j) quicksort(zahl, left, j);
	       if (i<right) quicksort(zahl, i, right);
	}
 
Das ist etwas zu einfach gedacht, einfach einen Code präsentieren und dann vom Deus ex machina die Lösung erwarten -- wer soll sich denn die Mühe machen, diesen Wust nachzuvollziehen? Ich denke, die korrekte Herangehensweise wäre, zu erklären, wie du dir den Algorithmus gedacht und ihn geschrieben hast. Sollte dann dein Algorithmus korrekt sein, wäre der nächste Schritt, den Code zu kontrollieren.
 
Da es nicht allzuviel Code war und es unsinnig gewesen wäre das koplett zu erklären was ich darin mache, habe ich den quelltext gepostet. Ich habe natürlich keineswegs erwartet die komplette Lösung in Form eines fertigen Algorithmus zu erhalten. Ich wollte lediglich einen Denkanstoß bekomen was an meinem Algorithmus falsch sein könnte.
Das Prinzip ist mir klar und meine Lösung erschien mir logisch deswegen wüßte ich nicht wie ich mein Problem erklären soll, aber ich habe den Denkfehler mittlerweile rausgefunden.
 
Zurück