Zweidimensionales Char Array mit Bubblesort sortieren
-
Moin,
ich habe ein kleines Problem meine Bubbleosort-Funktion zum laufen zu kriegen, der Hauptteil:void LexBubblesort(char *array) { int j; int i; char *tmp; for (i=0; i < laenge - 1; i++) { for (j=0; j<laenge - 1; j++) { if (strcmp(array[j], array[j+1]) > 0) { tmp = array[j]; array[j] = array[j+1]; array[i+1] = tmp; } } } }
scheint so zu funktionieren, nun möchte ich in diese Funktion die Variable:
char Bezeichnung[100][20];
einfügen, leider bekomme ich beim einsetzen:
LebBubblesort(*Bezeichnung); //mit oder ohne * der selbe Fehler
die Fehlermeldung "warning: passing arg 1 of `LexBubblesort' from incompatible pointer"
Was muss ich tun um mein zweidimensionales Array von dieser Funktion sortieren zu lassen?
Danke und Gruß an alle!
Metalmind
-
Also übergeben kannst du es zum Beispiel mit
LebBubblesort(&Bezeichnung[0][0]);
. Pass aber auf, dass die Länge dann 20*100=2000 ist.
-
Würde LebBubblesort(&Bezeichnung[0][0]); denn ausreichen? Würde das nicht quasi nur den Teil [0][0] sortieren?
SeppJ schrieb:
Pass aber auf, dass die Länge dann 20*100=2000 ist.
Sorry, aber was meinst du damit?
-
Metalmind01 schrieb:
Würde LebBubblesort(&Bezeichnung[0][0]); denn ausreichen? Würde das nicht quasi nur den Teil [0][0] sortieren?
Das würde quasi garnichts sortieren.
Beim Hochzählen von array[j] nach array[j+1] weiß innerhalb der Sortierfunktion niemand, um wieviel Bytes der Zeiger 'weiterhüpfen' soll.
Übergib doch nen Zeiger auf char* :void bubble_me ( char** a, unsigned n ) { int j, i; char* tmp; for ( i = 0; i < n-1; i++ ) for ( j = 0; j < n-1; j++ ) if ( strcmp ( a[j], a[j+1]) > 0 ) tmp = a[j], a[j] = a[j+1], a[j+1] = tmp; } void gucki_guck ( char** a, unsigned n ) { unsigned i = 0; while ( i < n ) puts ( a[i] ), i++; } int main() { char a[][20] = { "ddd", "bbb", "aaa" }; char* pa[] = { &a[0], &a[1], &a[2] }; bubble_me ( pa, sizeof ( pa ) / sizeof ( *pa )); gucki_guck ( pa, sizeof ( pa ) / sizeof ( *pa )); return 0; }
-
void bubble_me ( char** a, unsigned n )
{
int j, i; char* tmp;for ( i = 0; i < n-1; i++ )
for ( j = 0; j < n-1; j++ )
if ( strcmp ( a[j], a[j+1]) > 0 )
tmp = a[j], a[j] = a[j+1], a[j+1] = tmp;
}void gucki_guck ( char** a, unsigned n )
{
unsigned i = 0;
while ( i < n )
puts ( a[i] ), i++;
}int main()
{
char a[][20] = { "ddd", "bbb", "aaa" };
char* pa[] = { &a[0], &a[1], &a[2] };
bubble_me ( pa, sizeof ( pa ) / sizeof ( *pa ));
gucki_guck ( pa, sizeof ( pa ) / sizeof ( *pa ));
return 0;
}[/cpp]Also wenn ich das richtig gesehen habe ist deine Funktion bubbl_me meine Bubblesort-Funktion, nur dass ich die länge, bei dir n, als feste Variable eingefügt habe.
gucki_guck ist die Ausgabe, quasi das printf(), soweit richtig?Könntest du mir bitte erklären warum du in char a[][20] in die erste Klammer nichts eingetragen hast, ebenso wie in pa?
Danke für das Beispiel,
-
Metalmind01 schrieb:
Also wenn ich das richtig gesehen habe ist deine Funktion bubbl_me meine Bubblesort-Funktion, nur dass ich die länge, bei dir n, als feste Variable eingefügt habe.
Jo. Umbenannt, um einen Parameter erweitert und optisch ein bisschen aufgepeppt.
Und einen schwerwiegenden Indexfehler korrigiert i+1 -> j+1.Metalmind01 schrieb:
gucki_guck ist die Ausgabe, quasi das printf(), soweit richtig?
Jepp. Die Funktion gibt alle Zeichenketten aus.
Metalmind01 schrieb:
Könntest du mir bitte erklären warum du in char a[][20] in die erste Klammer nichts eingetragen hast, ebenso wie in pa?
So lassen wir das den Compiler zählen, man kann aber auch einen festen Wert eingeben.
-
Meine Funktion sieht nun so aus:
void swap2(char *array1, char *array2) //tauscht Variable a und b { char *tmp; tmp = (char*) malloc(laenge*20*sizeof(char*)); strcpy(tmp,array1); strcpy(array1,array2); strcpy(array2,tmp); free(tmp); return; } void LexBubblesort(char *array[]) //Bubblesort-Funktion für alphabetische Arrrays { int j; int i; for (i=0; i < laenge - 1; i++) { for (j=0; j<laenge - 1; j++) { if (strcmp(array[j], array[j+1]) > 0) { swap2(array[j],array[j+1]); } } } }
Nun muss ich in diese Funktion nurnoch das Array eingesetzt bekommen. Ich versuche es nach dem Schema: LexBubblesort(Woerter); wobei das Array das Aussehen char Woerter[100][20]; hat.
Leider bekomme ich dabei einen Compilerfehler wegen inkompatiblen Zeigertypen, weiß jemand wie ich dieses Array dort einfügen kann?
Lieber Gruß!
Metalmind