Sortieralgorithmus hat Fehler



  • Hallo an alle

    Ich hab für eine SChulübung einen Sortieralgorithmus geschrieben der mir die Zahlen in einem Array sortiert:

    void sortieren(double* feld, unsigned char anz)
    {
            unsigned char i, j;
    	double temp;
    
    	for(i = 0; i <= anz - 1; i++)
    	{
    		for(j = 0; j <= anz - i; j++)
    		{
    			if(feld[j] > feld[j+1])
    			{
    				temp = feld[j];
    				feld[j] = feld[j+1];
    				feld[j+1]= temp;
    			}
    		}
    	}
    }
    

    Jedoch hab ich das Problem, das wenn ich in der main das Array mit Zufallszahlen initialisiere, hab ich beim sortieren die ersten 2 Zahlen 0.000 sind. Wenn ich es mit neuen Zufallszahlen initialisieren, tritt der Fehler nicht auf.

    Woran kann das liegen??

    Hab echt keinen Plan..

    Ich hoffe es kann mir wer helfen

    Danke im Voraus

    Gruß Robert



  • Warum überhautp unsigned char? Ich würde zum Zählen ja schon aus Prinzip zahlen verwenden! Ich nehme an, das soll ein Bubble-Sort sein. Der müsste in deiner Version so aussehen:

    for (int j = anz - 1; j > 0; j--) {
    			for (int i = 1; i < anz; i++) {
    				if (feld[i - 1] > feld[i]) {
    					temp = feld[i - 1];
    					feld[i - 1] = feld[i];
    					feld[i] = temp;
    				}
    			}
    		}
    

    Wobei das eine äußerst "naive" Methode ist, einen Bubble-Sort zu implementieren, da du ihm durch die beiden for-Schleifen seine linearität bei der Anzahl der Vergleiche nimmst. Bessere wäre es, du nimmst dir eine weitere Hilfsvariable um zu gucken, ob getauscht wurde oder nicht. Wenn nicht, kann die Schleife verlassen werden:

    static void sort(int[] array) {
    	boolean swapped;
    
    	do {
    		swapped = false;
    
    		for (int i = 0; i < array.length - 1; i++) {
    			if (array[i] > array[i + 1]) {
    				// Elemente vertauschen
    				swapped = true;
    			}
    		}
    	} while(swapped);
    }
    

    Zumindest so in der Art... Für Fehler übernehme ich keine Haftung 😉



  • Ja klar das ist eine sehr einfache Lösung.

    Jedoch warum hab ich immer beim 1. Mal in den ersten zwei Zahlen eine 0??

    gruß Robert



  • Ähhh... Die Lösung steht da doch! 😕


Anmelden zum Antworten