Zählvariable in While Schleife zählt nicht, bleibt immer 0



  • Hey,

    ich möchte einen Array mit Hilfe des Sortierverfahrens insertsort sortieren. Das klappt auch. Lediglich die Anzahl der Vertauschungen werden immer mit 0 ausgespuckt. Also swaps=0 obwohl es oft zu Vertauschungen kommt. Jemand eine Idee?

    void insertsort(int a[], int n){
    
    	int v, i = 0, j = 0, swaps = 0;
    
    	for (i = 0; i < n; i++){
    		v = a[i];
    		j = i;
    		while (a[j-1]>v)
    		{
    			swaps = swaps + 1;
    			a[j] = a[j - 1];
    			j = j - 1;
    		}
    		a[j] = v;
    	}
    
    	printf("\nAusgabe des mit insertsort sortierten Array:\n");
    	printf("%d Vertauschungen\n", swaps);
    	print_array(a, 6);
    }
    


  • Geht aber so wie es soll, sehe da auch keinen Fehler.
    Unter welchem System und welchem Compiler arbeitest du denn ?
    Mal ein Minimalbeispiel probiert ? Quasi einfach so:

    #include <stdio.h>
    void insertsort(int a[], int n){ 
    
        int v, i = 0, j = 0, swaps = 0; 
    
        for (i = 0; i < n; i++){ 
            v = a[i]; 
            j = i; 
            while (a[j-1]>v) 
            { 
                swaps = swaps + 1; 
                a[j] = a[j - 1]; 
                j = j - 1; 
            } 
            a[j] = v; 
        } 
    
        printf("\nAusgabe des mit insertsort sortierten Array:\n"); 
        printf("%d Vertauschungen\n", swaps); 
       // print_array(a, 6); 
    }
    
    void main() 
    { 
        int k[] = {7,3,8,3,67,8,3};
    	insertsort(k, 4);
    }
    


  • Du greifst am Anfang auf a[-1] zu, ich seh auch keinen Mechanismus, der verhindert, dass j immer kleiner wird. Ich weiß nicht, ob das deine angebliche Beobachtung, dass er korrekt sortiert, aber swap auf 0 setzt, erklärt, aber dass dabei seltsame Dinge (= undefiniertes Verhalten) passieren, sollte wohl klar sein.


Anmelden zum Antworten