Selection Sort funktioniert nicht



  • Hallo, ich bin recht neu in der Thematik. Ich hatte mit Bubble Sort keine Probleme und versuche mich momentan an dem Selection Sort Algorhitmus.

    Allerdings habe ich bei meinem Code das Problem, dass er nicht wie gewünscht funktioniert und die sortierte Zahlenreihe ausgibt. Ich finde dazu allerdings den Fehler nicht und habe mich nun schon durch unzählige Seiten gelesen. Allerdings konnte mir bisher nichts weiterhelfen.Ich hoffe das ihr mir weiterhelfen könnt und wäre sehr dankbar.

    #include <iostream>
    
    using namespace std;
    
    int main() {
    
    	int N = 10;
    	int Arr[N] = {1,2,9,4,8,3,7,5,6,10};
    
    	int i, j, min, temp;
    
    	for (i = 1; i < N; i++){	
    
    		min = i;				
    		for (j = i + 1; j <= N; j++) {	
    			if (Arr[j] < Arr[min]) {
    				min = j;
    
    				temp = Arr[min];		
    				Arr[min] = Arr[i];
    				Arr[i] = temp;	
    			}
    		} 
    	} 	
    
    cout << Arr[N];
    
    return 0;	
    }
    

  • Mod

    Arrays mit N Einträgen haben Indizes von 0 bis N-1.

    PS: Der Rest sieht aber auch falsch aus. Wie eine Mischung aus Selection Sort und Bubble Sort, aber keines von beidem so richtig. Das wird nicht funktionieren. Guck dir noch einmal an, wie Selection Sort geht.



  • Zumindest bei mir schmeisst auch die folgende Codezeile einen Fehler:

    int N = 10;
    int Arr[N] = {1,2,9,4,8,3,7,5,6,10};
    

    entweder muss es

    int const N = 10;
    

    heissen, oder

    int Arr[] = {1,2,9,4,8,3,7,5,6,10};
    int N = sizeof(Arr)/sizeof(int);
    

    Zudem ist

    cout << Arr[N];
    

    nicht korrekt. Entweder musst du ein gültiges Element ansprechen:

    // Wäre in dem Fall immer das letzte Element
    cout << Arr[N-1];
    

    Oder die Ausgabe muss über eine Schleife erfolgen die jedes Element im Array durchgeht und ausgibt, da ich mal davon ausgehe das du den kompletten Array ausgeben möchtest.



  • bytemare schrieb:

    int Arr[] = {1,2,9,4,8,3,7,5,6,10};
    int N = sizeof(Arr)/sizeof(int);
    

    Dann lieber gleich besser

    int Arr[] = {1,2,9,4,8,3,7,5,6,10};
    int N = sizeof(Arr)/sizeof(Arr[0]);
    


  • SeppJ schrieb:

    Arrays mit N Einträgen haben Indizes von 0 bis N-1.

    PS: Der Rest sieht aber auch falsch aus. Wie eine Mischung aus Selection Sort und Bubble Sort, aber keines von beidem so richtig. Das wird nicht funktionieren. Guck dir noch einmal an, wie Selection Sort geht.

    Hi,
    der Algo an sich sieht doch fast korrekt aus. Im unterschied zu BubbleSort sucht man ja hier immer erst das Minimum und tausch nur dies. Bei Bubble Sort vergleiche ich immer nur nebeneinander liegende Elemente und muss daher mehrere Durchläufe (im worse-case) durchgehen.

    Es müssten nur die Zählvariablen etc angepasst werden und die swap-"Funktion" muss ans Ende der ersten for-Schleife.

    Zumindest bei mir funktioniert der Algo super(sobald man die Fehler ausgemerzt hat), lasse mich aber gerne eines besseren belehren 😃

    Gruß


  • Mod

    bytemare schrieb:

    der Algo an sich sieht doch fast korrekt aus.

    'fast korrekt' ist auch nur ein Synonym für 'falsch'. Es sind zugegeben nicht viele Änderungen nötig, um es korrekt zu machen, aber es sind ja auch nur ein paar Zeilen Code.



  • SeppJ schrieb:

    bytemare schrieb:

    der Algo an sich sieht doch fast korrekt aus.

    'fast korrekt' ist auch nur ein Synonym für 'falsch'. Es sind zugegeben nicht viele Änderungen nötig, um es korrekt zu machen, aber es sind ja auch nur ein paar Zeilen Code.

    Ja da hast du recht. "Fast korrekt" ist wirklich keine gute Formulierung im Zusammenhang mit Programmierung/Algorithmen 😃

    Wollte damit nur andeuten, das die Grundidee des ThreadErstellers gut ist und nur hier und da kleine Änderungen vorgenommen werden müssen damit das ganze läuft.

    Die Änderungen wurden ja auch schon alle angesprochen. Schauen wir mal was der TE daraus macht 👍

    Gruß


Anmelden zum Antworten