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.