bubble-sort ein Zeichen-array in alphabetischer Reihenfolge in c
Ich versuche zu bubble-sort ein Zeichen-array in alphabetischer Reihenfolge.
Mein code ist wie folgt:
#define CLASS_SIZE 10
#include <stdio.h>
void bubbleSortAWriteToB(const char a[], char *b[]);
int main(void){
char *s_letters[CLASS_SIZE];
char letters[CLASS_SIZE] = {'a','r','p','b','r','c','x','e','w','j'};
bubbleSortAWriteToB(letters,s_letters);
return 0;
}
void bubbleSortAWriteToB(const char a[], char *b[]){
char temp;
int i,j;
for(i=0;i<CLASS_SIZE-1;i++){
for(j=1;j<CLASS_SIZE;j++){
if((int)a[j-1]>(int)a[j]){
temp = a[j];
*b[j] = a[j-1];
*b[j-1] = temp;
}
}
}
}
Es gibt keine Fehlermeldung aber wenn ich es stecken bleibt wie es ist irgendwie in einem inifinte Schleife. Aber von was ich sehen kann es ist nicht, dass entweder. Können Sie mir helfen?
- Es ist nicht eine unendliche Schleife, es ist ein " segmentation fault.
- Was bedeutet das?
- Es bedeutet, dass man versucht, auf Speicher zuzugreifen, den Sie eigentlich nicht sein sollte.
- Es heißt, es war ein "segmentation fault". 😉 Ist dieses Hausaufgaben?
- Ihre zweite Schleife nicht setup korrekt für ein bubble-sort. Es sollte verglichen werden, gegen die ich irgendwie zu reduzieren die Arbeit, die es tut, indem Sie die Hälfte. Auch, dein swap ist Durcheinander. Bessere var-Namen zu helfen, sich selbst ein bisschen. a,b,i,j sind schwer für den menschlichen Verstand zu analysieren. Fortran77 dies nicht.
- Ja,es ist eine Hausaufgabe 🙂
- Sie finden diese Frage nützlich: stackoverflow.com/questions/859634/...
- Sind das nicht "meine " bug" - Fragen besser geeignet, um codereview.stackexchange.com? Interessant ist, dass nicht einer von den Entscheidungen, die, wenn Sie Stimmen zu schließen, eine Frage "off topic". Vielleicht "zu lokalisierten" angemessen ist, aber die Migration scheint weniger hart als geradezu schließen.
- Code-Fehlerbehebung Fragen sind explizit off-topic bei CodeReview.SE. Sie wollen arbeiten-code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fixieren Sie Ihre code
Zuerst von allen, gibt es einige ziemlich ernste grundsätzlichen Probleme mit dem code. Bevor wir bewältigen diese aber lassen nur reparieren, was Sie bisher haben. Ihre Sortier-loop schien die Hälfte Sortieren ein array und die Hälfte Sortierung der b-array. Sie auch nie initialisiert das array b enthalten keine Werte. Hier ist eine korrigierte version des Codes:
Das Update war zum initialisieren des array b mit den Punkten a, und dann Sortieren Sie das array b an Ort und Stelle durch Vergleich der entsprechenden Werte in ein array.
Vereinfachung der code
In Ihrem ursprünglichen code, die Strategie war es, ein array von Zeigern (b) würde, zeigen Sie auf die Elemente in a, und dann sortiert werden. Das war unnötig, hier aber, da die Zeichen sind kleiner als Zeiger, so lassen b ein array von Zeichen ist mehr Speicherplatz-effizienter und einfacher.
Auch, Ihr Abstand war sehr gequetscht-zusammen und etwas schwer zu Lesen. Hier ist eine Lösung, die verwendet b als ein array von Zeichen anstelle von Zeigern, und bietet verbesserte Abstand. Auch die Deklaration der Funktion oben nicht notwendig war. Es genügt zu definieren, die die Funktion und deklarieren Sie es einmal.
Ihre
s_letters
ist nicht ordnungsgemäß initialisiert, doch Sie zugreifen:Es ist ein segfault.
Den ich kompiliert habe, diese mit
gcc -g
und es lief durch Valgrind, und habe diese:Zeile 20 wird dies:
char *b[]
ist ein array vonchar
Hinweise, aber Sie versuchen, etwas in die Zeiger ohne diese initialisiert werden. Wenn Sie wirklich wollen, dies zu tun, müssten Sie zu:Aber ich glaube nicht, dass das, was Sie eigentlich wollen. Wenn Sie ändern Sie einfach es zu
char b[]
, und entfernen Sie alle Ihre*
's, es funktioniert einwandfrei.char*
.Bubble-sort
Konsole:
Input: "face321"
Ausgabe: "123acef"