Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Algorithmus "insertion sort" in C

15 views
Skip to first unread message

Roland

unread,
Apr 10, 2012, 1:16:56 PM4/10/12
to
Hallo

Vielleicht kann mir hier jemand bei meinem Algorithmus "insertion sort" in C
weiterhelfen.

C-Code:

struct test *sTest

// vector of struct pointers
struct test *pt_test[10];
for (i = 0; i < 10; i++) {
pt_test[i] = sTest;
sTest = sTest->next;
}

// algorithm "insertion-sort"
for (n = 1; n < 10; n++) {
m = n;
while ((m > 0) && ((strcmp((char*) pt_test[m - 1]->cName, (char*)
pt_test[n]->cName) > 0))) {
strcpy((char*)pt_test[m]->cName, (char*)pt_test[m - 1]->cName);
m--;
}
strcpy((char*)pt_test[m]->cName, (char*)pt_test[n]->cName);
}


Der "insertion-sort" Algorithmus macht leider nicht das was er sollte.
Vielleicht kann mir jemand einen Tipp geben

Vielen Dank

Daniel Krügler

unread,
Apr 11, 2012, 4:23:52 PM4/11/12
to
Am Dienstag, 10. April 2012 19:16:56 UTC+2 schrieb Roland:
> Hallo
>
> Vielleicht kann mir hier jemand bei meinem Algorithmus "insertion sort" in C
> weiterhelfen.

Eigentlich sollte man Fragen, die nach Hausaufgaben aussehen, nicht direkt beantworten. Ist ausserdem nicht wirklich C++, naja.

> C-Code:
>
> struct test *sTest
>
> // vector of struct pointers
> struct test *pt_test[10];
> for (i = 0; i < 10; i++) {
> pt_test[i] = sTest;
> sTest = sTest->next;
> }
>
> // algorithm "insertion-sort"
> for (n = 1; n < 10; n++) {
> m = n;
> while ((m > 0) && ((strcmp((char*) pt_test[m - 1]->cName, (char*)
> pt_test[n]->cName) > 0))) {
> strcpy((char*)pt_test[m]->cName, (char*)pt_test[m - 1]->cName);
> m--;
> }
> strcpy((char*)pt_test[m]->cName, (char*)pt_test[n]->cName);
> }
>
>
> Der "insertion-sort" Algorithmus macht leider nicht das was er sollte.
> Vielleicht kann mir jemand einen Tipp geben

In deiner inneren Schleife greifst du fälschlicherweise auf
pt_test[n]->cName zu. Anstelle dessen musst du dir vor Beginn
der inneren Schleife pt_test[n]->cName in einen Ziwschenpuffer
kopieren und in der Schleife immer darauf zurückgreifen, da
pt_test[n]->cName ja überschrieben wird. Am Ende der Schleife
dann aus dem Puffer wieder nach pt_test[m]->cName kopieren.

Wenn du dir Insertionsort anguckst, wirst du feststellen, dass
der Speicher für ein zu sortierendes Element erforderlich ist,
gelle?

Besten Gruss aus Bremen,

Daniel Krügler
0 new messages