[gelöst]Selection Sort funzt net...



  • Einen schönen Sonntag Vormittag wünsch ich euch, hoffe ihr habt die Zeitumstellung gut verkraftet 😉

    Mal wieder macht c++ nicht, was ich will obwohl ich mir schon seit einigen Stunden den Kopf zerbreche woran es liegt...
    Google hilft mir nicht und mein c++ Buch auch nicht...
    Wie das Thema schon sagt, soll ich einen Sortieralgorithmus schreiben...
    Ich habe mich für den Selection Sort entschieden..
    So sieht er bei mir aus:

    */

    #include <iostream>
    using namespace std;

    int main () {

    double a[10] = { 12.6 , 33.77 , 51.32 , 95.11 , 19.78 ,
    35.34 , 85.18 , 89.0 , 37.5 , 24.1 };

    double median; // Bis hier war die Aufgabe vorgegeben
    int i , k , t, min;
    int n;

    for (i=0; i< n-1; i++ ) //Schleife für die n-1 Durchläufe
    { // 1.
    min =i;
    for (k= i+1 ; k<n ; k++) //Ermittlung des kleinsten Wertes
    {
    if( a[k] < a[min])
    min=k; //2.
    }

    t=a[min]; //Vertauschen der Werte..
    a[min]= a[i]; // 3.
    a[i] = t;

    }
    }
    return 0; //4.

    }

    zu 1. invalid operands of types `int' and `<unknown type>' to binary `operator<'

    zu 2. converting to `int' from `double'

    zu 3. invalid operands of types `int' and `<unknown type>' to binary `operator<=

    zu 4. synthax error...

    Ich bin mir aber super sicher,dass so dere SelecSort funktionieren sollte...

    Wie immer bin ich über jede Hilfe dankbar 😉



  • n ist nicht initialisiert und eine Klammer ist zuviel. Du kannst nicht bis n-1 durchlaufen, wenn es für n keinen Wert gibt.



  • Danke schonmal für die schnelle Antwort ..

    Also muss ich "n" einen werte geben?
    z.b
    int n;
    n=0;

    ODer versteh ich dich gerade falsch ?



  • Wenn du 0 gibst hast du ein Laufzeitfehler, da du die Schleife nicht bis 0-1 laufen lassen kannst. Aber im Prinzip ja. Nur kann man das besser machen:

    int n = 10;

    Gleich initialisieren ist besser.

    Außerdem würde ich i und k in den Schleifen deklarieren also so:

    for (int i = 0; ....



  • Es ist aber nicht nötig alles in den Klammern zu intialisieren oder?

    #include <iostream>
    using namespace std;
    
    int main () {
    
    	double a[10] = { 12.6 , 33.77 , 51.32 , 95.11 , 19.78 ,
    		           35.34 , 85.18 , 89.0 , 37.5 , 24.1 };
    
    double median;             //Unuser Variable
    int i , k , t, min;
    int n=10;
    
    for (i=0; i< n-1; i++ )
    {
    	min =i;
    	for (k= i+1 ; k<n ; k++)
    	{
    		if( a[k] < a[min])
    		min=k;
    	}
    
    	t=a[min];        // converting to int from double
    	a[min]= a[i]; 
    	a[i] = t;               
    
    }
    cout << "Median: " << median <<endl;
    
    return 0;          //expected unqualified-id before "return"
    }                     //expected declaration before '}' token
    

    So siehts jetzt aus, geht aber immernoch net 😉



  • Vor dem Vertauschen fehlt bei dir die Abfrage, ob i!=min ist.
    Siehe auch hier.



  • Perfekt...
    Hat wunderbar geklappt...
    Vielen Dank allen beteiligten 😉


Anmelden zum Antworten